先看一段代码:
#include<stdio.h>
int main()
{
char p[]="th";
char q[]="th";
printf("%d,%d",p,q);
return 0;
}
上面代码输出为两个字符串的首地址值,也就是数组变量名的值,数组变量名的值等于字符串的首地址值。输出结果两者地址值相差4,字符串以'\0'为结尾,所以sizeof(p)=3,而地址相差的值对应的就是数据所占多少字节的值,(可以这么理解)但是为什么地址相差4呢,这是因为局部变量存放在栈空间里的地址是连续的,且以4字节倍数的大小分配栈空间。当我们改成:
char p[]="thee";
char q[]="thee";
输出结果两者地址值相差8。
当我把两个字符串的定义换成如下:
char *p="the";
char *q="the";
输出结果两个值确实是一样的,这就是两种定义的区别,数组定义是直接给数组分配一个内存空间,而指针定义则是将指针变量指向某一块地址。