RISOLTO [C] domanda vettori / puntatori

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

demda

Utente Attivo
Messaggi
352
Reazioni
49
Punteggio
40
Ciao ragazzi, ho 2 dubbi enorme che mi assalgono

1) Se ogni il nome di ogni elemento di un vettore è il puntatore alla rispettiva cella, eseguendo questo codice:
Codice:
#include

int main(){
int v[2];
int *p0 = v[0];
int *p1 = v[1];

printf("v[0]: %p\n",v[0]);
printf("v[1]: %p\n",v[1]);

printf("p0: %p\n",p0);
printf("p1: %p\n",p1);
return 0;
}
Dovrei ottenere come output che la stampa di v[0] dovrebbe essere uguale a p0 e quella di v[1] a p1, è corretto?

2) perché gli indirizzi stampati non sono consecutivi ? mi spiego meglio, dalla stampa ottengo questo:
Screenshot_20191228-003516~2.webp
Ma essendo l'indirizzo di v[1] uguale a quello di v[0] incrementato di 1 non dovrei avere una roba simile:
Codice:
v[0]: 0xb908c598
v[1]: 0xb908c599
p0: 0xb908c598
p1: 0xb908c599
Screenshot_20191228-003516.webp

Aiutatemi vi prego, sono nel pallone.

Inviato da Mi A2 Lite tramite App ufficiale di Tom\'s Hardware Italia Forum
 
Ultima modifica da un moderatore:
Non credo che quelli che fai scrivere siano gli indirizzi del vettore, ma probabilmente il contenuto delle celle (non inizializzate?)

se

int *p0;

la locazione di v[0] sarà:

p0 = &v[0];

che poi un intero ha lunghezza di almeno 16bit quindi le locazioni non saranno consecutive come dici tu



Inviato dal mio Nexus 6P utilizzando Tapatalk
 
"1) Se ogni il nome di ogni elemento di un vettore è il puntatore alla rispettiva cella, eseguendo questo codice"
No. Ogni vettore è implicitamente convertibile in puntatore costante dello stesso tipo che punta alla prima cella.
Questo vuol dire che costrutti come:
C++:
int array[5];
auto ptr = array;
Hanno senso ed è equivalente a ptr = &array[0];

v[0], v[1] ecc… sono valori e non indirizzi di memoria. Il fatto che tu abbia potuto assegnare un intero a un puntatore fa preoccupare sul compilatore…
 
Quello che tu stampi non è l’indirizzo degli elementi del vettore, che sarebbe &p[0] per il primo elemento (tu stai stampando il valore, che essendo il vettore nello stack sono numeri casuali)
Comunque essendo il vettore costituito da interi la differenza dei valori degli indirizzi sarebbe 4 (la dimensione di un intero di 32bits) e non 1
 
Grazie a tutti, avevo interpretato male il libro. Ora è tutto chiaro
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top