C语言中的二维数组里a+1和*(a+1)为什么都是地址 c语言二维数组与指针,我想知道为什么*(a+1).与显示中的...

作者&投稿:晨隶 (若有异议请与网页底部的电邮联系)

二维数组又包含多个一维数组,a指向第一个一维数组的首地址就还是地址。

a+bai1应该是 (a+0)+1

这里的a是二维数组中的二级指针

数组名为a[0]的一维数组(表示行)

也是数组名为a的一维数组(表示列)

后面的1表示行数组移动1行

0表示列的移动

所以是1行0列的地址

*(a+1)中a是二级指针

取值二级指针是一级指针

一级指针指向的一维数组(二维数组中的行)

一维数组移动一位只能是向下移动也就是行

所以就是 第一行的首地址,也就等于二维数组中,第一行零列的地址。

扩展资料:

二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:

LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t

按“列优先顺序”存储时,地址计算为:

LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t

存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节 [1]

参考资料来源:百度百科-二维数组



二维数组, int a[10][20];
a是一个指针的指针, 即二级指针.
一个指针加一个数, 当然还是指针(即a+1是指针)
取值一个二级指针, 是一级指针(即指针), 所以还是指针, 不过类型发生了变化.
a+1的类型为int *[10].
而*(a+1)的类型则为int *, 也就是平常的指针.
如果你学习二维数组是用心, 你就会知道不存在二维数组, 二维数组其实是一个包含数组的数组, 即数组的每一个元素还是一个数组(这点有点像面向对象的思维).
所以a[0]就是取第一个元素值, 而第一个元素是数组, 所以其值仍是一个指针.
答了这么多, 一看问题, 发现是"地址".....地址和指针是一个东西.

a+1应该是 (a+0)+1
这里的a是二维数组中的二级指针
数组名为a[0]的一维数组(表示行)
也是数组名为a的一维数组(表示列)
后面的1表示行数组移动1行
0表示列的移动
所以是1行0列的地址

*(a+1)中a是二级指针
取值二级指针是一级指针
一级指针指向的一维数组(二维数组中的行)
一维数组移动一位只能是向下移动也就是行,
所以就是 第一行的首地址 也就等于二维数组中 第一行零列的地址

例如a[5][10];
a + 1的值是第二行的首地址,
* (a + 1)得值也是第二行的首地址,
但是a + 1不等于a[1],而* (a + 1)等于a[1]。
如果给a+1再加1,就是a+1+1,就是a+2,它的值是第三行的首地址
如果给*(a+1)再加1,就是*(a+1)+1,它的值是第二行的第二个地址
他们移动的区别:前者是纵向的,后者是横向的。
指针类型的区别:两者均存放为同一地址,但前者是指向一维数组,后者是指向元素的。
实际就是前者每次跳动4*10个字节,后者每次跳动4个字节。

二维数组又包含多个一维数组 a指向第一个一维数组的首地址就还是地址

C语言中的二维数组里a+1和*(a+1)为什么相等?~

它们只是值相等,但类型不相等,不能说它们相等。
a+1是int **类型,指向的是数组a的第二行的起始地址; *(a+1)是int *型,指向的是数组a的第二行第一个元素的地址。

二维数组是两层指针,这个你该明白
*(*(a+i)+j)这个是表示i行的第j个数据,注意啊,是两个*
要是不理解,记住套用即可

一个*是指针
所以ij都是指针

a+1是一个指针,表示第1行的首地址(c中数组时从0开始计数的)

在二维数组中,
a,a[0],&a[0][0]这三个指针虽然都是a的首地址的值,但是在c中用起来是不一样的
a表示二维数组的首地址
a[0]表示第0行的首地址
&a[0][0]表示第0行的第0个元素的地址

计算机c语言中二维数组a[1]和a[2]分别代表什么
答:语句中 a[1] 表示 地址 &a[1][0], a[2] 表示 地址 &a[2][0].即二维数组a 的 第2行 元素 的 首地址 和 第3行 元素 的 首地址。

在二维数组中*(a+1)为什么等于a+1,主要是想知道*(a+1)为什么是一个地址...
答:因为a是一个二维数组名,所以,a是一个二级指针,**a就是&a[0][0],a就是*(a+0),也就是&a[0]所以,*(a+1),也就是&a[1],与a[1]都是表示同一个意思,即&a[1][0]...

在二维数组中怎么理解*(a+1)=a[1]?又怎么理解&(a+1)
答:a指针,指向数组a[]的首地址,即a[0]的位置,类似*(a+1)指向a[1]。他们的值是相等的,所以 (a+1)=a[1]。&(a+1)是值在内存中的地址,是一个字符串。

二组数组与指针中a[i]和*(a+i)等价问题
答:你要记住 a[i]和*(a+i)等价的,但在二维数组中表示的是 地址。在一位数组中是直。你可以这样理解,一个一位数组,他的每个元素都是一个数组,那他就是一个二维数组,那么a[i]或*(a+i)就表示相应的那个元素...

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

c语言中的二维数组a[a][j]可以表述为*(*(a+1)+j),但是我看不懂这个...
答:[1]为第2行第2列,地址为0x04,对应数据0x04。由此可以看出a[y][x]可以表示为*((x + &a) + y);&a为数组a的首地址。不知道这样讲您是否能够理解。同时“c语言中的二维数组a[a][j]可以表述为*(*(a+1)+j...

定义一个二维数组a[3][3],请问a与a[0]等价吗,*(a+1)与a[1]等价吗,a...
答:a是二维数组的首地址,而a[0]同样是二维数组中第一行的首地址,是等价的。*(a+1)是第二行首个元素,a[1]是其地址,不等价。a[1]与a+1等价

c语言中,数组名的前面加*, 如a[3][4]; *a输出的是什么结果
答:你可以建一个一维数组int arr[] = {1,2,3}测试一下,在一维数组中,*arr代表的就是取第一个元素的值,它的值是个int型数值,也就是第1个元素1,而二维数组中的a[3]里存放的是三个元素(3个一维数组)的首地址...

定义了二维数组a[3][4],那么a+1,*(a+1),*a[1],*(a[0]+1)各代表什么意思...
答:所以a[1]得到的是int型的值,对其取下标是非法的。所以a[1][0]是一个非法的表达式。咳咳以下都是废话。。怎么跑题了。。。既然打出来就懒得删了 至于&a[1][0],编译器解释为&((a[1])[0]),同样非法。

对于已正确定义的二维数组a, *(a[i]+j)与a[i][j]的含义相同是对的...
答:a+i是第i行的行指针,那么*(a+i)就是第i行第0个元素的指针,自然*(a+i)+j就是第i行的第j个元素的指针了,最后通过这个指针用*取出来的值*(*(a+i)+j)不就是第i行第j列的值,这就和a[i][j]完全是一...