C语言,一个关于数组指针的问题。
int(*p)[5];我知道p是一个指向数组的指针。我想问的是他指向一个什么样的数组,p指向一维数组,还是二维数组。为什么。如果p的的值是0x0028ff00,那么p+1...
int (*p)[5]; 我知道p是一个指向数组的指针。 我想问的是他指向一个什么样的数组,p指向一维数组,还是二维数组。为什么。 如果p的的值是0x0028ff00,那么p+1的值是多少。为什么?
展开
1个回答
展开全部
根据解析规则,上述声明器解析为指向int[5]型变量的指针
也就是指向大小为5的int型数组
所谓指向,私以为是p
=
&...的形式。
比如
123int arr[10][5];int (*p)[5];p = &arr[0];
注意arr是二维数组,其声明等同于int
(arr[10])[5],所以arr[0]的类型就是int[5]。故上述语句将p指向了一个int[5]型的变量。
如果arr不是如此声明,比如
123int arr[10][4];int (*p)[5];p = &arr[0];
此时编译器可以给出一个警告。
顺便说一句,C的声明器中,数组声明器和函数声明器后置真是奇葩。
不如Java等等直观。如果C的声明语法像这样:
1int[][] a;
就能一眼看出a是什么了。
也就是指向大小为5的int型数组
所谓指向,私以为是p
=
&...的形式。
比如
123int arr[10][5];int (*p)[5];p = &arr[0];
注意arr是二维数组,其声明等同于int
(arr[10])[5],所以arr[0]的类型就是int[5]。故上述语句将p指向了一个int[5]型的变量。
如果arr不是如此声明,比如
123int arr[10][4];int (*p)[5];p = &arr[0];
此时编译器可以给出一个警告。
顺便说一句,C的声明器中,数组声明器和函数声明器后置真是奇葩。
不如Java等等直观。如果C的声明语法像这样:
1int[][] a;
就能一眼看出a是什么了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询