c语言二维数组与指针,我想知道为什么*(a+1).与显示中的a+1,所给出的地址是一样的,怎么理解?
{inta[2][3],*i,*j;i=*(a+1);j=*a;printf("%d%d%d",i,j,a+1);}...
{ int a[2][3],*i,*j;
i=*(a+1);
j=*a;
printf("%d %d %d",i,j,a+1);
} 展开
i=*(a+1);
j=*a;
printf("%d %d %d",i,j,a+1);
} 展开
5个回答
展开全部
a=&a[0];数组名相当于指针,等于数组首地址, 类型为 int(*)[3];
*a= a[0];数组int a[2][3];二维数组 a有两个子数组,a[0],a[1] ;
有2*3 =6个int型元素 a[0][0],a[0][1],a[0][2];a[1][0],a[1][1],a[0][2];
就是说定义一个数组int a[2][3];同时定义了 1+2+6
共九个标识符,6个整型变量,两个三个整型元素的一维数组a[0],a[1] 定义为
{int a[0] [3],a[1] [3] 这不可直接定义,只能理解为这个形式} ;
一个二维数组 a;一共定义了9个名字。
*(a+1)=*(&a[1])=a[1];
a+1=&a[0]+1 =&a[1];
由于并无单独的存储空间存储 a[1] 这个指针(a[1][0]的地址),所以a[1]和&a[1] 除了类型不同外,实际内容是相同的,
&a[1]的类型为 int(*)[3];
a[1]的类型为 int [3]; 也就是int* ;
实际上a,a[0],&a[0][0] 甚至&a的值都是相同的,但是类型不同
&a;: int (*)[2][3]; (const ??? int (const ???*)[2][3];)
a,&a[0];: int [2][3] ==>int (*)[3]; (const ??? int (const ????*)[3])
a[0]; :int [3]==>int *; (const??? )int *;
&a[0][0];: int * (const???) int*;
a[0][0]; : int;
*a= a[0];数组int a[2][3];二维数组 a有两个子数组,a[0],a[1] ;
有2*3 =6个int型元素 a[0][0],a[0][1],a[0][2];a[1][0],a[1][1],a[0][2];
就是说定义一个数组int a[2][3];同时定义了 1+2+6
共九个标识符,6个整型变量,两个三个整型元素的一维数组a[0],a[1] 定义为
{int a[0] [3],a[1] [3] 这不可直接定义,只能理解为这个形式} ;
一个二维数组 a;一共定义了9个名字。
*(a+1)=*(&a[1])=a[1];
a+1=&a[0]+1 =&a[1];
由于并无单独的存储空间存储 a[1] 这个指针(a[1][0]的地址),所以a[1]和&a[1] 除了类型不同外,实际内容是相同的,
&a[1]的类型为 int(*)[3];
a[1]的类型为 int [3]; 也就是int* ;
实际上a,a[0],&a[0][0] 甚至&a的值都是相同的,但是类型不同
&a;: int (*)[2][3]; (const ??? int (const ???*)[2][3];)
a,&a[0];: int [2][3] ==>int (*)[3]; (const ??? int (const ????*)[3])
a[0]; :int [3]==>int *; (const??? )int *;
&a[0][0];: int * (const???) int*;
a[0][0]; : int;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a是双下标变量,相当于定义是int **a; a存放着这个二维数组的首地址,由于是二维数组,
a+1实际上是地址a+3*sizeof(int),(其中的3对应着定义int a[2][3];)也就是a[1][0]的首地址
所以*(a+1)还是一个指针,与&a[1][0]是一样的,a+1是指针,运算结果与前者相同。
a+1实际上是地址a+3*sizeof(int),(其中的3对应着定义int a[2][3];)也就是a[1][0]的首地址
所以*(a+1)还是一个指针,与&a[1][0]是一样的,a+1是指针,运算结果与前者相同。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主你好
你这里的a是数组名
数组名a是数组a[2][3]的首地址 也就是a[0][0]的地址
那么a+1就是a[0][1]的地址 *(a+1)对应的就是a[0][1]
希望能帮助你哈
你这里的a是数组名
数组名a是数组a[2][3]的首地址 也就是a[0][0]的地址
那么a+1就是a[0][1]的地址 *(a+1)对应的就是a[0][1]
希望能帮助你哈
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
×(a+1)是一个指向 指向(a+1)所以它和a+1的地址是一样的
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询