Mi chiedevo come funzionano gli array in c. Finisco con un'ipotesi e mi piacerebbe sapere se ho ragione o no.come funzionano gli array internamente in c/C++
Sappiamo che gli array sono una sequenza di casi di memoria adiacenti (riquadri), in cui ogni casella ha le dimensioni del tipo che immagazzina (vale a dire se una casella INT ha una dimensione = sizeof (int) e una matrice di 3 INT richiede in memoria posti adiacenti di 3 sizeof (int))
Ora sappiamo anche che possiamo allocare dinamicamente memoria per un array di un certo tipo (malloc in C, nuovo in C++).
ciò che mi meraviglia è il fatto che un array abbia per origine l'indirizzo della prima casella dell'array e il primo valore (il valore nella casella successiva) quando lo si chiama con la parentesi [0] è array [0] == * (array + 0) == * array (se l'array è stato dichiarato "tipo * array" o "tipo array []" o "tipo array [dimensione]") e "array" chiamato in questo modo se definire come un puntatore o un array ("tipo * array" o "tipo array []" o "tipo array [dimensioni]") è l'indirizzo della prima casella.
Finisco per pensare e mi piacerebbe una conferma su questo: gli array quando anche dichiarati con le parentesi quadre ([]) sono effettivamente in memoria una sequenza di n puntatori contenenti ciascuno (avendo come valore non un indirizzo) l'indirizzo di una casella di memoria Bi contenente il valore effettivo + quelle caselle di memoria (B0, ..., ognuna contenente i valori effettivi). tale che nel e quando si dichiara "int array [5]" il programma alloca effettivamente 5 caselle adiacenti di puntatori int P0, P1, .., P4 e 5 posti di memoria di dimensione int sparsi in tutta la memoria del computer B0, B1 ,. .., B4 in cui il valore di Pi è l'indirizzo del Bi
ho ragione o torto !! ?? Grazie!
No, l'array ha gli interi effettivi a meno che non si abbia un 'int * arr []'. – chris
+1 per immagine :) –
Leggere la sezione 6 delle [domande frequenti su comp.lang.c (http://www.c-faq.com/). –