二维数组数组名赋值给变量

来源:百度知道 编辑:UC知道 时间:2024/06/05 15:54:36
一个二维数组a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},
int **p=a;如果是printf("%d",*(*(a+1)+2)),输出的是6。。
如果是printf("%d",*(*(p+1)+2)),输出的就不是6了。。
为什么?
int (*p)[3]; 是说p是数组指针,指向一维长度为3的整型数组,
但是它一维长度不是4吗?数组指针指向二维数组时,是怎么一回事?还有**p=a为什么不行?刚学c,fly_fire 能解释一下吗?谢谢了。

二维数组的指针形式是int (*p)[],也就是一维数组的指针。

而int **p是一个指针数组的指针形式也就是int *p[]的指针
举个例子: int a[4][3];
int (*p)[3]=a;
int *q[4];
for(int i=0;i<4;i++)
q[i]=a[i];
int **r=q;

希望你可以注意他们的区别。。。别搞混了

首先来说,int **p=a;就是错误的语法,编译应该是过不去的。用法也是错误的。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void main()
{
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},i;
int **p;
p=(int**)malloc(sizeof(int *)*4);
for(i=0;i<4;i++)p[i]=a[i];
printf("%d",*(*(a+1)+2));
printf("%d",*(*(p+1)+2));
free(p);
}

都不太明白,能说一下为什么吗?谢谢