代码:
#include<stdio.h>
int main(){
char * a = "qwer";
char b[] = "qwer";
printf("size of a is: %d\n",sizeof(a));
printf("size of b is: %d\n",sizeof(b));
return 0;
}
输出:
![](https://img2020.cnblogs.com/blog/2443881/202201/2443881-20220109173608669-1521322639.png)
解释:
1.字符串指针
- 存储在常量区
- a只是一个char类型的指针,指向“qwer”的第一个
- 能够用下标a[i]去访问qwer其中的一个,也能用*(a+n)去访问字符
- 不能修改其中的单个字符,只能整体修改
- sizeof(a)只能表示指针的大小,不能表示"qwer"占用的内存的大小
2.字符数组
- 存储在全局数据区或栈区
- b是一个数组,里面存储了"qwer",大小为4+1,其中的1代表'\0'
- 能够通过下标b[i]去修改"qwer"其中的某个字符,也能用*(b+n)去访问字符
- 字符数组最后一个一定是'\0',而其他类型的数组没有,比如char a1[] ='a';中printf(“%d”,sizeof(a1));的输出为2,因为a1中的'a'后面会自动加上一个'\0'