开辟了10个字节的空间在栈中 "abc"常量在代码段
char a[10]="abc";
p:8个字节存"abc"的地址 "abc"常量在代码段中
char *p="abc"
char *q="abc" p,q的值是一样的 到代码段中找"abc"直接取地址
// 8 3
printf("%lu %lu\n",sizeof(p),strlen(p)); p自己占的空间--------p所指向的空间
10 3
printf("%lu %lu\n",sizeof(a),strlen(a)); a所占的字节数和他所存的东西没有关系(由a后面的[]数字决定)----- a所指向的空间
*a=‘x’; 可以的 a是栈中开辟的10个空间,把("abc")从代码段中拷贝了一份在栈空间中
*a赋值是在栈中改变,不是改变("abc")本身
*p=‘x’;error *p是("abc")中的a,字符串在代码段中是个常量,不能改
p存的("abc")地址,*p取的是a的值 ,会发生段错误
进程映像:从上到下,低地址到高地址
代码段
数据段
静态数据段
堆空间
栈空间
环境变量表
命令行参数
测试2.
结果如下:a在栈区 &p在栈区 p在代码段(因为他存的是"abc"的地址)