# 实验 ```c #include <stdio.h> #include <stdlib.h> int main(int argc, char const *argv[]) { int a[3]; char b[3]; char *c = (char *) malloc(sizeof(char) * 3); char *d = "hello world"; printf("a: %p\n", a); // 栈 printf("b: %p\n", b); // 栈 printf("c: %p\n", c); // 堆 printf("d: %p\n", d); // 只读区(常量区) printf("&d: %p\n", &d); // d 是指针,本身的地址是在栈上 printf("main: %p\n", main); // 代码区 return 0; } ``` 输出 ``` a: 0x7fff5e71fa8c b: 0x7fff5e71fa75 c: 0x7faa8ce00150 d: 0x1014e0f76 &d: 0x7fff5e71fa60 main: 0x1014e0e50 ``` 为什么`&d`是在栈上,而`d`是在只读区呢? `d`里存的是字符串的首地址。具体参考[字符串的初始化原理](https://mengkang.net/993.html#blog-title-8)