|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jul 2007
Messaggi: 108
|
[C] Passaggio array a funzioni
Sono un po' confuso sull'argomento. Gli array se vengono modificati dalla funzione si devono passare con "&" davanti, giusto? Ma essendo gli array già dei puntatori perchè è necessario? Se poi consideriamo che, almeno con il mio IDE(codeblocks + mingw32, entrambi credo all'ultima versione), non cambia assolutamente niente passando un array come "array" o "&array" la confusione aumenta.
|
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Quote:
dato un array, ad esempio: Codice:
int v[3];
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3732
|
cmq tu non passi mai un array a una funzione ma sempre e solo un puntatore al primo elemento di esso
e la stessa cosa vale in uscita: ritorni sempre un puntatore, non un array intero: ergo, i dati scritti in memoria in modo contiguo non vengono mai copiati |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Jul 2007
Messaggi: 108
|
Pensavo che "&array" fosse un puntatore al puntatore "array".
![]() Se mi dite che le due scritture sono equivalenti è tutto chiaro. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
In generale &variabile restituisce l'indirizzo di memoria della variabile. Quindi se v è array di int, e gli int occupano 4 byte in memoria, &v[2] restituisce l'indirizzo del primo dei 4 byte che rappresentano il terzo elemento dell'array. &v[2] equivale a &(v[2]), cioè prima ottengo l'elemento v[2] e poi ne prendo l'indirizzo. Vale anche la seguente: &v[2] == (v + 2), così come v[2] == *(v + 2)
|
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Jul 2007
Messaggi: 108
|
Questo tutto chiarissimo, grazie.
&v invece restituisce v? E' un'eccezione oppure ho capito male? |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
https://uqqvkq.bn1302.livefilestore....ays.JPG?psid=1 Ultima modifica di vendettaaaaa : 29-11-2013 alle 13:59. |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Jul 2007
Messaggi: 108
|
Sono un po' ignorante di questioni sulla memoria
![]() Qualcuno può consigliarmi un link a proposito? |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:59.