实验
#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
里存的是字符串的首地址。具体参考字符串的初始化原理