关于c++用指针代替数组名通过sizeof函数计算数组长度的问题。
比如:inta[5]={1,2,3,4,5};int(*p)[5]=&a;sizeof(a);//计算数组的正确长度。sizeof(*p);//计算数组的正确长度。我是不...
比如:int a[5]={1,2,3,4,5};
int (*p)[5]=&a;
sizeof(a); //计算数组的正确长度。
sizeof(*p); //计算数组的正确长度。
我是不是可以这样理解:定义的指针p实际上是一个由1个一维数组a组成的二维数组。*p=p[0]也就是二维数组的元素&a也就是一位数组a的地址呢(而不是数组a的第一个元素的地址)?? 展开
int (*p)[5]=&a;
sizeof(a); //计算数组的正确长度。
sizeof(*p); //计算数组的正确长度。
我是不是可以这样理解:定义的指针p实际上是一个由1个一维数组a组成的二维数组。*p=p[0]也就是二维数组的元素&a也就是一位数组a的地址呢(而不是数组a的第一个元素的地址)?? 展开
2个回答
展开全部
sizeof看的是类型。a的类型是int[5],所以长度是5个int的长度。p的类型是int (*)[5],是一个指针,所以如果你对p进行sizeof运算的话,结果是一个指针的长度。而*p的类型又是int[5]所以sizeof *p和sizeof a是一样的。
指针不等价于数组(数组参与运算的时候可能被处理成指针,这是题外话),p是指向一个一维数组的指针。 *p=p[0]的确是一个一维数组。
数组a的地址就是a第一个元素的地址,类型不一样而已。
另外sizeof是运算符,不是函数。
指针不等价于数组(数组参与运算的时候可能被处理成指针,这是题外话),p是指向一个一维数组的指针。 *p=p[0]的确是一个一维数组。
数组a的地址就是a第一个元素的地址,类型不一样而已。
另外sizeof是运算符,不是函数。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询