Giả sử đoạn mã sau:struct c, con trỏ và cấp phát bộ nhớ cho các lĩnh vực
struct c {
char* name;
};
int main(int argc, char *argv[]) {
struct c c1;
c1.name = "Ana";
printf ("%s\n",c1.name);
return 0;
}
phản ứng đầu tiên của tôi sẽ có được để nghĩ rằng tôi cần phải phân bổ một số không gian, hoặc trên heap, hoặc bằng một rõ ràng char name[] = "Anna"
, nhưng ví dụ của tôi ở trên hoạt động. Trình biên dịch có lưu trữ chuỗi đó trong phân đoạn Dữ liệu và trỏ đến nó không? Nói cách khác, giống như việc thực hiện một số
struct c {
char* name = "Ana";
};
Cảm ơn.
+1 để thực sự trả lời câu hỏi –
Được rồi, tôi nghĩ mình đã hiểu. Điều gì làm rõ đây là "thời gian lưu trữ tĩnh" của bạn, điều đó có nghĩa là nó thực sự nằm trong phân đoạn dữ liệu tại thời gian biên dịch, và sau đó trình biên dịch biết rõ ràng là điểm nào. Cảm ơn. –