c语言中二维数组a[i][j],为什么a=*a?

如题所述

在C语言中,二者是相同的地址值。所以可以说a=*a.

二维数组a定义为a[i][j]时,代表一组数据,有i行j列,共计i*j的元素。

这组数据在内存中是连续存放的。而在C语言的使用中,a是二维数组的首地址。*a也就是a[0],是二维数组第一行的首地址。
所以,二者是相同的地址值,即数据a[0][0]的地址值。
也就是说,从值上,a,*a, a[0],&a[0][0]都是相同的值。

当时,说a=*a也并不是完全正确的,从类型上,a等同于二维指针,而*a等同于一维指针。二者类型并不相同,只是在一定条件下可以转换。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-30
我理解问题中的这个=楼主是指相等,而且是数值上相等。这是肯定的。*a实际是*(a+0)+0,也即是a[0]+0这个地址,和a一样,其数值也是这个二维数组的首地址。
但是二者含义可不同,不能直接相互赋值。a是行指针,即a是一个大小为i的数组,其元素也是数组,大小为j。*a由上面的解释,其实质是个列指针,指向a的第一个元素(大小为j的数组)的第0个元素。
第2个回答  2011-01-30
二维数组的指针比较特别,* 的作用是将行指针转换成列指针,数组名a是指向第一行的指针,*a则是指向第一行第一列的指针,根本含义上市不一样的,但是值都是a【0】【0】的地址
第3个回答  推荐于2016-08-19
#include "stdio.h"
main()
{
int a99[9][9],i,j;
for(i=0; i <9; i++) //i = 0
for(j=0; j<=i; j++) a99[i][j]=i*j; //j = 0
for(i=0; i<9; i++) //i = 0
{
for(j=0;j<=i;j++) printf("%6d",a99[i][j]); //j = 0
printf("\n");
}
}
正确的写法应该是上面这样的。
这里涉及到2个问题:
1.数组声明的时候a[9]就是有9个元素的数组,a[10]就是有10和元素的数组
2.数组赋值的时候第一个元素的下标是从0开始的,即a[0],最后一个下标是声明时的数字-1,如:声明时:a[9],最后一个元素是a[8]。a[9]是超范围的。本回答被提问者和网友采纳
第4个回答  2011-02-10
数组名a表示二维数组的首地址,*a就好比第一行的地址值a[0],a[0]表示&a[0][0]....

c语言中二维数组a[i][j],为什么a=*a?
在C语言中,二者是相同的地址值。所以可以说a=*a.二维数组a定义为a[i][j]时,代表一组数据,有i行j列,共计i*j的元素。这组数据在内存中是连续存放的。而在C语言的使用中,a是二维数组的首地址。*a也就是a[0],是二维数组第一行的首地址。所以,二者是相同的地址值,即数据a[0][0]的...

为什么C语言中二维数组的数组名a和*a表示的是同一个值?
于是a的值就是首地址的值。而*a,就是a[0],a[0]是第一行的标记,代表第一行的首地址。在二维数组中,所有元素都是紧密排列的,这样整个数组的首地址,第一行的首地址,和第一个元素的首地址,即a, a[0], &a[0][0] 都是相同的。于是a和*a的值是相同的。

C语言中 二维数组@a[i][j]的地址为什么可以表示成*(a+i)+j难道*(a+...
a是一个二维数组,a[i]表示其中的一行,是个一维数组,a[i][j]表示一行里面的一个元素。(a+i)就是a[i],是一个一维数组,当然表示一个地址,表示这个一维数组里面的第一个元素a[i][0]的地址。

C语言 二维数组问题 a[i][j]中 i是列数,j是行数,那么a[0][1]又是怎 ...
a[i][j],i是行数,j是列数。a[0][1]就是第0行第1列的元素。a[0][0]当然是第0行第0个元素,即数组的首元素。

C语言,定义二维数组a[i][j] 那么a[0][0]和a[0]有什么区别啊
当然有区别 a[0]是数组,a[0][0]才是取得第一个数组里第一个元素。比如a[][] = {{1,2,3},{4,5,6}};a[0][0] = 1;a[0] ={1,2,3};

c语言:为什么&a[i][j]的值是&(a+i)+j,,,求详解!!!
首先,我们知道&a[i][j]是取的a[i][j]的地址,它是一个二维数组。对二维数组的内存分配,我们可以理解为【先存行,再存列】也就是说我们可以将int a[3][4]的存储看作是先存的一位数组a[0],a[1]和a[2],而每一个一维数组,又是一个数组,即a[0]行包括a[0][0],a[0][1],a...

c语言中下面代码a[i][j]=0什么意思??
int a[11][20],定义的是二维数组,a[i][j]表示第i+1行,第j+1列的数组元素;a[i][j]=0; 表示对这个数组元素赋值。

...二维数组的指针问题, 对于一维数组来说,数组a[i]的数组名a就是数组...
二维数组相当于也是一个数组,里面装的都是一位数组a[3] = {a[0],a[1],a[2]},这里的a[0]-a[3]是三个一维数组,那么*(a+i)就是a[i],a[i]就是一维数组名,数组名是不是就是地址,那么*(a+i)就是地址,*(a+i)+j 是不是等价于a[i]+j ,a[i]我们刚才说了是一维数组...

C语言中二维数组下标问题
a可以理解为二重指针,a[0]理解指针,a[0][0]是对这个地址进行访问了。其实[ ]的意义 可以理解成* 。a[ i ]其实就相当于*(a+i) 所以原来的就相当于 *(*(a+i)+j) +的优先级比 *的高 所以外面那个括号可以去掉 就变成了 **(a+i)+j 。明白了吗?

C语言的二维数组问题
比如a[i][j]在一个n列的二维数组里的位置就是i*n+j 拿刚才那个例子来看 a[0][0]就是0*2+0 = 0,相当于一维数组的第1个元素 a[1][0]就是1*2+0 = 2,相当于一维数组的第3个元素 所以第i行j列的元素相当于它对应的一维数组里下标为i*n+j的元素,如果第一个元素以位置1来算的...

相似回答