急求~~一个c++的数组指针的问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 05:04:03
#include <iostream.h>
void main()
{
int a[2][3];
int (*p)[3]=a;
cout<<"p的占字节是:"<<sizeof(p)<<endl<<"a的占字节是:"<<sizeof(a)<<endl<<"*p的占字节是:"<<sizeof(*p)<<endl<<"a[0]的占字节是:"<<sizeof(a[0]);
}

输出结果是p占4,a占24,*p占12,a[0]占12,为什么输出的*p和a[0]占得字节数是一样,p占4个这个是数组做了隐式的转换,但是想不通*p和a[0]为什么会一样????????

int (*p)[3],定义的是一个指向有3个元素的数组,是一个行指针
sizeof(*P)是一行数所占的空间
a[2][3]中a[0]是第一行的地址,和*p含义一样,sizeof(a[0])也是一行3个整型数所占的空间
故两者相等的

*p 和 a[0]的类型都是 int[3],所以当然都是sizeof(int)*3

p是个指针类型, 所有指针的sizeof都是4, 没有什么隐式的转换

*p 和 a[0]的类型都是3个int,所以当然都是12
而p是指针类型,所以肯定是4,对于a,肯定就是2*3*4为24了