关于sizeof()的疑问?

来源:百度知道 编辑:UC知道 时间:2024/05/21 04:17:12
int main()
{
char *p1 = "abcd";
char p2[] = "abcd";
cout<<sizeof(p1)<<sizeof(p2)<<endl;
return 0;
}
这里两个sizeof()的参数都是数组地址,都是指针,为什么sizeof(p1)是指针的大小,而sizeof(p2)是p2树组的大小?

第一个sizeof()的是一个指针,为4

第二个sizeof(p2), p2数组名,他的结果就是数组的大小。数组名不等于指针,不要混淆了

sizeof()数据占用内存大小;
其实p1与p2指的都是字符串起始地址;
sizeof()在计算的时候都是计算从起始地址开始,数据占用空间大小,如果是指针,即是指针所指向的数据占用空间量,并不是指针的大小;
因为p1指向一个字符串常量,所以p1的值为字符串的长度;
因为p2是一个数组,需数组大小是定义自动设定的的,为4+1,因为后面要加一个'\0',所以数组空间大小为5;

p1被定义为指针,所以sizeof(p1)大小是指针的大小。
p2被定义为数组,所以sizeof(p2)大小是数组的大小。
p1和p2在使用的时候可以通用,但是当使用sizeof计算大小是不同。
sizeof(*p1) = sizeof(p2)
sizeof(p2) = strlen(p2) + 1

你问题关键是要弄懂指针数组地址的引用;