Sono confuso circa la seguente riga di codice:Array di puntatori a char array
char* words[] = { "aaa", "bbbb", "ccccc", "dddddd" };
Il modo comprendo, ogni parola viene prima memorizzato e poi ogni posizione dell'array words
punterà quindi alla prima carattere di ogni parola. Come vengono memorizzate queste stringhe? C'è allocazione dinamica in corso qui o queste parole sono memorizzate nello stack?
Se sono memorizzati nello stack, in che modo vengono memorizzati? Per esempio, se stampo alcuni dei contenuti di words
come di seguito:
#include <stdio.h>
int main() {
char* words[] = { "aaa", "bbbb", "ccccc", "dddddd" };
printf("\n\n(*words)[0] = %s", words[0]);
printf("\n\n(*words)[0]+1 = %s", words[0]+1);
return 0;
}
invece di stampare aaa
e bbbb
, quello che ottengo è aaa
e aa
. Non capisco davvero quale sia la ragione per questo poiché, per come la vedo io, words[0]+1
dovrei puntare alla stringa bbbb
e non al secondo carattere di aaa
. Che cosa sta succedendo qui?
Siete confusi 'parole [0] + 1',' (parole + 1) [0] 'e' parole [1] '? –
Prova '& words [0] + 1' – oldrinb