刚学指针,有个关字符串指针和字符数组的困惑。
代码如下:
char a[] = {"hello"};
printf(" a:%p\n", a);
printf("&a:%p\n", &a);
char *b = {"world"};
printf(" b:%p\n", b);
printf("&b:%p\n", &b);
输出:
a:0x7ffeed6516e6
&a:0x7ffeed6516e6
b:0x1025b1fa2
&b:0x7ffeed6516d8
疑问:
对于b,编译系统在内存常量区分配“world”,在内存变量区分配指针型存储空间,用于存放b,且b指向‘w‘。
对于a,我就不能理解了。编译系统在内存变量区分配“hello”,并且a应该为指针常量,其值为'h'的地址,指向字符'h'。(我以为)a作为一个常量,难道不应该存储在内存常量区吗?为啥它取地址后不是某个常量区的位置,而竟然是它的值?是不是编译系统并未在内存常量区开辟空间存放a?我使用a时,究竟使用的是什么?