一、把二级指针误以为成三级指针
i n t ( ∗ p a r r 3 [ 10 ] ) [ 5 ] int (*parr3[10])[5] int(∗parr3[10])[5];来看这个表示的意思是什么?
二、探究
1、疑问
1>他代表的是什么
首先,[]的优先级高于*所以 p a r r 3 parr3 parr3一定是个数组存放10个数组指针,然后把该部分拿走就变成了 i n t ( ∗ ) [ 5 ] int(* )[5] int(∗)[5],指针指向的是数组,则我们可以肯定他是一个指针数组,指向的数组元素类型为 i n t int int每个数组有5个元素
2>几级指针?
//指针实现二维数组的打印
void disPlay(int(*p[3])[4], int row, int col,int(*p2)[4]) {
int i = 0;
int j = 0;
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
printf("%d ", *(*(p+i) + j));
}
printf("\n");
}
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
printf("%d ", *(*(p2 + i) + j));
}
printf("\n");
}
}
int main()
{
int arr[3][4] = { 1,2,3,4,5,6,7,8,9 };
int row = sizeof(arr) / sizeof(arr[1]);//行数
int col = sizeof(arr[1]) / sizeof(arr[1][1]);//列数
disPlay(arr, row, col,arr);
return 0;
}
我们通过以上的代码然后进行调试监视&p,和&p2
可以分别看到&p的类型为一个三级指针,&p2为一个二级指针,
3>代码执行结果
4>结果
根据以上结果可知这是把数组第一行的元素1,2,3都当做了地址然后又*了
但是不清楚为什么值是固定的希望大家可以指出并且如果有错误的地方也请一并指出Up还只是一个小萌新会虚心学习