代码:
#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;
}
输出:
![]()
解释:
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'