[ aleksazr @ 14.05.2011. 09:15 ] @
Code:

BOOL ReadFile(
    HANDLE hFile,
    LPVOID lpBuffer,
    DWORD nNumberOfBytesToRead,
    LPDWORD lpNumberOfBytesRead,
    LPOVERLAPPED lpOverlapped
    );


    char text[1];
    DWORD temp;

        ReadFile(hComm, text, 1, &temp, NULL);



I lpBuffer i lpNumberOfBytesRead su definisani kao pointeri.
Zašto onda text nema & a temp ima znak & ?

Malo mi je dojadilo da nagadjam gde kompajler hoće a gde neće taj znak,
pa ako bi neko da mi objasni ili da link... pošto mi google nije pomogao.
[ karas @ 14.05.2011. 09:25 ] @
Operator & daje adresu promenljive, bez obzira da li je ona pokazivac ili ne. Tako na primer,
Code:

DWORD temp;
DWORD* tempAddr = &temp;

daje adresu promenljive tipa DWORD, dok
Code:

LPVOID lpBuffer;
LPVOID* lpBufferAddr = &lpBuffer;

daje adresu promenljive tipa LPVOID. Verovatno te buni to sto je LPVOID vec definisan kao pokazivac, ali nije nikakav problem uzeti adresu pokazivaca jer je i on neka varijabla.
U tvom slucaju, text je kao niz zapravo pokazivac na niz znakova, tako da se prosledjuje kao takav funkciji ReadFile(). S druge strane, temp je tipa DWORD pa kako funkcija prihvata pokazivac kao cetvrti parametar, treba proslediti adresu od temp.
Za vise detalja proguglaj za "address of operator".
[ aleksazr @ 14.05.2011. 10:35 ] @
Probao sam ova dva primera ispod, i izgleda da mi je sad jasno...

Code:

    char text;
    DWORD temp;
    ReadFile(hComm, &text, 1, &temp, NULL);

    char text[1];
    DWORD temp[1];
    ReadFile(hComm, text, 1, temp, NULL);


Znači, kad hoću da pošaljem adresu varijable u prvom primeru,
onda upotrebljavam znak &, dok u drugom ne upotrebljavam.

Iako su u oba primera definisane iste varijable i zauzimaju isto prostora,
u drugom primeru je definisano kao niz (array), a u prvom nije niz.

Da li je to jedini uslov (bar u ovom primeru)? Da li je varijabla NIZ ili nije?
Bez obzira na tip varijable: char, int, struktura...?
[ karas @ 15.05.2011. 12:45 ] @
Citat:

Znači, kad hoću da pošaljem adresu varijable u prvom primeru, onda upotrebljavam znak &, dok u drugom ne upotrebljavam.

Da, operator & koristis za uzimanje adrese. U drugom primeru text vec jeste adresa/pokazivac na parce memorije gde se nalazi niz elemenata.

Citat:

Iako su u oba primera definisane iste varijable i zauzimaju isto prostora,
u drugom primeru je definisano kao niz (array), a u prvom nije niz.

Nisu definisane iste varijable, razlikuju im se tipovi, nije isto int i niz int-ova, bez obzira sto taj niz ima samo jedan element.

ReadFile() prihvata pokazivac (LPDWORD), sto znaci da joj treba proslediti adresu neke varijable tipa DWORD. Niz temp je zapravo pokazivac na niz DWORD elemenata i zato se moze proslediti kao parametar. Pogledaj http://www.cplusplus.com/doc/tutorial/pointers/ odeljak Pointers and arrays: "In fact, the identifier of an array is equivalent to the address of its first element, as a pointer is equivalent to the address of the first element that it points to, so in fact they are the same concept."