Nee, klopt had ik idd al bedacht was meer dat ik niet zo bekent ben met memcpy en memset dus in dat opzicht had ik dat gekopieerd van iemand anders zijn code (snap wel wat het doet) Had idd ook gewoon de & en * kunnen gebruiken.quote:Op donderdag 20 juni 2013 00:54 schreef trancethrust het volgende:
Je kan er een struct van maken als in
[ code verwijderd ]
Een sizeof(receive_buffer) is dan 1500*sizeof(char).
(Overigens is dynamisch alloceren van de receive-buffer via new niet nodig)
| 1 | char RecvBuff[1500]; |
| 1 | recvfrom(Sock,RecvBuff,sizeof(RecvBuff),0,0,0); |
Die struct stond er voor een redenquote:Op donderdag 20 juni 2013 09:40 schreef netolk het volgende:
[..]
Nee, klopt had ik idd al bedacht was meer dat ik niet zo bekent ben met memcpy en memset dus in dat opzicht had ik dat gekopieerd van iemand anders zijn code (snap wel wat het doet) Had idd ook gewoon de & en * kunnen gebruiken.
maar stel dat ik de buffer statisch alloceer als
[ code verwijderd ]
Dan zou je zeggen dat dit ook zou moeten werken
[ code verwijderd ]
Maar dat werkt dus niet en faalt de recvfrom functie
| 1 | T x[ n ] |
klinkt logisch iddquote:Op donderdag 20 juni 2013 09:51 schreef trancethrust het volgende:
[..]
Die struct stond er voor een reden
Een
[ code verwijderd ]
alloceert een statische array van type T en grootte n. De type van x is dan dus een array van T, ofwel een pointer naar T, en de size daarvan is sizeof( void* ).
Als je de boel in een struct gooit, dan neemt de struct de grootte van alle velden, dus de grootte van de totale char array.
Een *recvbuffer is een pointer, dus wederom 4 of 8 bytes. sizeof(recvbuffer) is wat je wilt (als recvbuffer een struct is dat de char-array bevat, zoals hierboven).quote:Op donderdag 20 juni 2013 09:58 schreef netolk het volgende:
[..]
klinkt logisch idd
maar dan zou sizeof(*recvBuff) ook moeten werken maar bij de dynamische allocatie kreeg ik daar ook een error van recvfrom
k, dus sizeof neemt alleen de grote van het object wat je er instopt en niet waar het naar verwijst ongeacht het gebruikt van * ?quote:Op donderdag 20 juni 2013 10:04 schreef trancethrust het volgende:
[..]
Een *recvbuffer is een pointer, dus wederom 4 of 8 bytes. sizeof(recvbuffer) is wat je wilt (als recvbuffer een struct is dat de char-array bevat, zoals hierboven).
http://en.cppreference.com/w/cpp/language/sizeofquote:Op donderdag 20 juni 2013 10:08 schreef netolk het volgende:
[..]
k, dus sizeof neemt alleen de grote van het object wat je er instopt en niet waar het naar verwijst ongeacht het gebruikt van * ?
Grootte van het type van het object dat je erin stopt, inderdaad, of de grootte van het type dat je meegeeft (sizeof werkt op zowel objecten/instances als datatypes). Dit is ook precies wat je wilt.quote:Op donderdag 20 juni 2013 10:08 schreef netolk het volgende:
[..]
k, dus sizeof neemt alleen de grote van het object wat je er instopt en niet waar het naar verwijst ongeacht het gebruikt van * ?
Uhm, nee?quote:Op donderdag 20 juni 2013 09:51 schreef trancethrust het volgende:
[..]
Die struct stond er voor een reden
Een
[ code verwijderd ]
alloceert een statische array van type T en grootte n. De type van x is dan dus een array van T, ofwel een pointer naar T, en de size daarvan is sizeof( void* ).
Als je de boel in een struct gooit, dan neemt de struct de grootte van alle velden, dus de grootte van de totale char array.
| 1 2 3 4 5 6 | long buffer[256]; int True = (sizeof(buffer) == 1024); for(int i=0; i<sizeof(buffer)/sizeof(*buffer); i++) printf("%d\n", buffer[i]); |
Oh. Redelijk stonedquote:
SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
quote:Op vrijdag 21 juni 2013 16:32 schreef trancethrust het volgende:
[..]
Oh. Redelijk stonedBlijkbaar wordt een (niet-dynamische array) als een soort struct gezien; nooit geweten!
sizeof geeft size van een object, een C array is ook gewoon een object.SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
Alleen zijn C arrays best wel klote want je kan niet pass by value doen, alleen maar by reference.
En als je dus in een function sizeof doet van je parameter "array" krijg je size van je reference ipv array.
http://ideone.com/jcU5D8
ahh, vandaarquote:Op vrijdag 21 juni 2013 19:10 schreef t4rt4rus het volgende:
[..]
sizeof geeft size van een object, een C array is ook gewoon een object.
Alleen zijn C arrays best wel klote want je kan niet pass by value doen, alleen maar by reference.
En als je dus in een function sizeof doet van je parameter "array" krijg je size van je reference ipv array.
http://ideone.com/jcU5D8
Ah ik snap de tegenstelling nu. Mijn eerste reactie was `dit is nog lelijker dan een struct'`, maar de grap is natuurlijk dat als een C array geen aparte datatype was, dat een struct zoals hier ook nooit zou kunnen werken; de struct zou anders precies de grootte zijn van een array pointer.quote:Op vrijdag 21 juni 2013 19:10 schreef t4rt4rus het volgende:
[..]
sizeof geeft size van een object, een C array is ook gewoon een object.
Alleen zijn C arrays best wel klote want je kan niet pass by value doen, alleen maar by reference.
En als je dus in een function sizeof doet van je parameter "array" krijg je size van je reference ipv array.
http://ideone.com/jcU5D8
Je weet dat het zetten van struct voor de typename C is en niet nodig (deprecated?) in C++?quote:Op vrijdag 21 juni 2013 23:53 schreef trancethrust het volgende:
[..]
Ah ik snap de tegenstelling nu. Mijn eerste reactie was `dit is nog lelijker dan een struct'`, maar de grap is natuurlijk dat als een C array geen aparte datatype was, dat een struct zoals hier ook nooit zou kunnen werken; de struct zou anders precies de grootte zijn van een array pointer.
En een pass-by-value zou nooit letterlijk kunnen omdat de grootte van een argument nooit compile-time bepaald kon worden. Noodzakelijk kwaad. Cool, weer wat geleerd.
http://ideone.com/swuvZrquote:Op zaterdag 22 juni 2013 00:15 schreef t4rt4rus het volgende:
[..]
Je weet dat het zetten van struct voor de typename C is en niet nodig (deprecated?) in C++?
Het was meer een discussie over waarom een T foo[500] geen T*-type had, wat (mij) aanvankelijk veel natuurlijker leek. Persoonlijk als ik arrays doorgeef gebruik ik pointers/iterators, het andere komt me wat onnatuurlijk over.quote:Zie std::array als je een array als value will passen.
In C++14 komt er waarschijnlijk een dynamic array.
nee, ik heb een boek uit 2002 van hem (wel is waar vertaald naar NL in die tijd was ik nog niet zo'n voorstander van Engelse boeken)quote:Op zondag 23 juni 2013 01:07 schreef t4rt4rus het volgende:
Is er al iemand die Stroustrups nieuwe boek heeft?
En zijn er mensen die C++14 een beetje volgen?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | for (size_t y = 0; y < p_Par->Xtion.CanvasYRes; y = y++) { for (size_t x = 0; x < p_Par->Xtion.CanvasXRes; x = x++) { float py = OpenNiDataObj->OriginalYMatrix.at<float>(y,x); float px = OpenNiDataObj->OriginalXMatrix.at<float>(y,x); if ((abs(px-Par->obj.leftx)<10 || abs(px-Par->objrightx)<10) && py!=0) { OpenNiDataObj->OriginalYMatrix.at<float>(y,x)=-501; } } } |
Dit is een derde snellerquote:Op donderdag 5 december 2013 13:40 schreef Gehenna het volgende:
Je zou met een Lambda functie de 2 for loops kunnen vervangen.
Maar dat is waarschijnlijk minder leesbaard dan 2 for loops, om nog maar te zwijgen over de potentiële snelheidsverlies...
Of het sneller kan, zou je dat even in de OpenCV documentatie moeten halen (wellicht zijn er bepaalde iterators die je kunt gebruiken). maar zo bekend ben ik niet met OpenCV.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | for (size_t y = 0; y < p_Par->Xtion.CanvasYRes;y=y++) { float* My = (p_OpenNiDataObj->ZMatrix).ptr<float>(y); for (size_t x = 0; x < p_Par->Xtion.CanvasXRes; x = x++) { float& Myx = My[x]; } } [code] Maar waar ik eigenlijk naar op zoek was is iets als [code] matrixoperation(doeditendat); |
| 1 2 3 4 5 6 7 | for (size_t y = 0; y < p_Par->Xtion.CanvasYRes;y=y++) { float* My = (p_OpenNiDataObj->ZMatrix).ptr<float>(y); for (size_t x = 0; x < p_Par->Xtion.CanvasXRes; x = x++) { doeditendat } } |
| 1 2 3 | matrixoperation( (if(px)<40 || px>80){px=2}); of matrixoperation((if(px)<40 || px>80){sumx++},pointertosumx); |
Als ik het goed begrijp wil je dus graag een functie 'doeditendat' meegeven als argument van de functie 'matrixoperation'?quote:Op donderdag 5 december 2013 14:14 schreef Holy_Goat het volgende:
[..]
Dit is een derde sneller
[ code verwijderd ]
en de bijbehorende functie dan zoiets is als
[ code verwijderd ]
Doeditendat is altijd iets simpels. Soms trekt het lijntjes als x = iets, soms somt het alle waarden op, etc.
Denk het wel jaquote:Op donderdag 5 december 2013 14:53 schreef Gehenna het volgende:
[..]
Als ik het goed begrijp wil je dus graag een functie 'doeditendat' meegeven als argument van de functie 'matrixoperation'?
Dan is dit wellicht iets voor je: http://stackoverflow.com/(...)-as-a-parameter-in-c
Ja, hier staat namelijk een oneindige loop.quote:Op donderdag 5 december 2013 12:29 schreef Holy_Goat het volgende:
for (size_t y = 0; y < p_Par->Xtion.CanvasYRes; y = y++)
Dit moet toch sneller kunnen?
En in die oneindige loop nog een oneindige loopquote:Op donderdag 5 december 2013 19:59 schreef thabit het volgende:
[..]
Ja, hier staat namelijk een oneindige loop.
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |