Załóżmy następujący kod:c kodowanym, wskaźnik i alokacji pamięci dla pól
struct c {
char* name;
};
int main(int argc, char *argv[]) {
struct c c1;
c1.name = "Ana";
printf ("%s\n",c1.name);
return 0;
}
Moją pierwszą reakcją byłoby myśleć, że muszę przeznaczyć trochę miejsca, albo na stercie lub poprzez wyraźne char name[] = "Anna"
, ale mój przykład powyżej działa. Czy kompilator właśnie zapisuje ten ciąg w segmencie danych i wskazuje na niego? Innymi słowy, jest to, że robi się to tak, jakby wykonać
+1 za rzeczywiste udzielenie odpowiedzi na pytanie –
Dobra, myślę, że rozumiem. Wyjaśniło to, że jest to "czas przechowywania statycznego", co oznacza, że faktycznie znajduje się w segmencie danych podczas kompilacji, a następnie kompilator wie, gdzie dokładnie wskazać. Dzięki. –