Ottima spiegazione, solo una precisione: *(p+2) e *(vett+2) sono uguali a vett[2] non a vett[3] ; Probabilmente a te si trova perchè in "pallone" sia l'elemento [2] che l'elemento [3] è la "L" .
Esatto, perché la numerazione delle celle dei vettori parte da 0 e non da 1, sfiga ha voluto che venisse scelta una parola con la doppia proprio in 3a e 4a posizione, quindi non si è capito, ma quelle due "L" in realtà non sono propriamente la stessa lettera...
gli errori come questi sono i peggiori, non ti vengono segnalati dal compilatore o altro e non è neanche detto che si manifestino subito (come è successo in questo caso)
ma se io assegnassi a p l'indirizzo di una qualsiasi variabile (non l'indirizzo di un vettore) gia inizializzata nel ciclo e facessi piu uno cosa succederebbe? esempio in cui vorrei assegnare a tale indirizzo successivo la lettera k. char c; char* p; p=&c; *(p++)='k'; cosa succede nella memoria??
Pur scrivendo il tuo stesso programma, ovvero: #include #include #include int main(int argc, char** argv){ char vett[10+1]; char* p; int i; unsigned long dim; p= &vett[0]; scanf("%s ", p); printf("Stampo la terza cella del vettore *(p+2) : %c ", *(p+2));
printf("Stampo la terza cella del vettore *(vett+2) : %c ", *(vett+2)); printf("Stampo la terza cella del vettore vett[10+1] : %c
Nella printf del ciclo for hai inserito vett+1, invece che vett+i quindi cicla sempre su sé stesso mentre per il problema del "doppio inserimento" è dovuto al scritto nella scanf, va rimosso
Ottima spiegazione, solo una precisione: *(p+2) e *(vett+2) sono uguali a vett[2] non a vett[3] ;
Probabilmente a te si trova perchè in "pallone" sia l'elemento [2] che l'elemento [3] è la "L" .
Rinaldo Clemente è + 3 poiché il contatore dei vettori è vett[0], parte da 0 poi 1 e poi 2
Vett[3]: quarta cella pal"l"one
. E basta
Esatto, perché la numerazione delle celle dei vettori parte da 0 e non da 1, sfiga ha voluto che venisse scelta una parola con la doppia proprio in 3a e 4a posizione, quindi non si è capito, ma quelle due "L" in realtà non sono propriamente la stessa lettera...
gli errori come questi sono i peggiori, non ti vengono segnalati dal compilatore o altro e non è neanche detto che si manifestino subito (come è successo in questo caso)
ma se io assegnassi a p l'indirizzo di una qualsiasi variabile (non l'indirizzo di un vettore) gia inizializzata nel ciclo e facessi piu uno cosa succederebbe? esempio in cui vorrei assegnare a tale indirizzo successivo la lettera k.
char c;
char* p;
p=&c;
*(p++)='k';
cosa succede nella memoria??
Pur scrivendo il tuo stesso programma, ovvero:
#include
#include
#include
int main(int argc, char** argv){
char vett[10+1];
char* p;
int i;
unsigned long dim;
p= &vett[0];
scanf("%s
", p);
printf("Stampo la terza cella del vettore *(p+2) : %c
", *(p+2));
printf("Stampo la terza cella del vettore *(vett+2) : %c
", *(vett+2));
printf("Stampo la terza cella del vettore vett[10+1] : %c
", vett[2]);
dim = strlen(vett);
for(i=0; i
perchè sei stupida, ecco perchè
Nell'ultima printf non è vett+1 bensì vett+i
Perchè sei troppo bella e quindi il compilatore va in errore...
@@GiacTucc simp
Nella printf del ciclo for hai inserito vett+1, invece che vett+i quindi cicla sempre su sé stesso mentre per il problema del "doppio inserimento" è dovuto al
scritto nella scanf, va rimosso