二维数组中,a和a为什么不同,二维数组中,*a和*a[0]为什么不同。

2021-01-14 10:08:03 字数 3109 阅读 7823

1楼:金色潜鸟

在 c 语言中不是标点符号,而是运算符。

有恒等式: a[i] = *(a+i)

所以,表达式里, *a[0] = *(*(a+0)) = *(*(a)) = **a.

你的 *a 是一个星,而 *a[0] 是 2 个 星,当然不同。

------

*a不应该是返回以a 的值作为地址的那个空间的取值吗 -- 只有 当 a 是1维数组时才是对的。*a 等于 *(a+0) 等于 a[0];

2楼:匿名用户

二维数组中,*a表示二维数组首地址,*a[0]表示第一行的首地址(即a[0]的首地址,而a[0]又可以说是一个数组)

但这两个地址值是一样的,不过意义不一样

3楼:匿名用户

a[0]本身是个值了,单个a代表地址。如同int a[2]= ;其中 a[0]=1

4楼:哈高妮萨

a[0]等同于同*a。

所以*a[0]等同于**a。

a[0]是第一行元素首地址。

*(*a)等同于*(a[0])等同于*(&a[0][0]),即第一行第一个元素的值。

c语言 二维数组a【0】与a与a【0】【0】有什么区别?

5楼:匿名用户

数组在内存中是连续按行分布的,对于a[2][3]=,};它在内存中的分布式1,2,3,4,5,6;所以他等价于a[2][3]=;在c/c++中,数组名也即是数组首地址,这里加入a=0x1000;那么它的地址分就是:1000,1004,1008,100c,1010,1014;&a[0][0]也就取第一个元素的地址,即1000,a[0]是第一行1000,1004,1008的首地址,也是1000,也即是a元素的首地址;

int *b=a[0];

*b和a[0]是等的,是a数组第一行首地址;不同的是a[0]是只读的,*b是可读写的因为b是指针变量,你可以试试a[0][3],a[0][4],a[0][5]都能打印出来,别看a[2][3]以为这样越界了,其实越不越界是按地址来算的,地址上讲,&a[0][3]=a[1],所以完全没问题;按照地址计算上面打印的值就是4,5,6;同理用*(b+3),*(b+4),*(b+5)也是一样的道理;

a就是数组的首地址,a[0]是第一行第一个元素的首地址,也即是a的首地址,&a[0]是第一行的首地址,从数值上将,没问题,只是数据类型上不一样;

a[0][0]就是取第一行第一个元素的值,也即是1

6楼:匿名用户

a[0][0]是值,a[0]和a是地址

c语言中二维数组的a代表是0行首地址,那*a不就是首个元素吗,为什么*a代表的还是首个元素的地址

7楼:

哈哈!以下标从0开始说。若a是二维数组名,则a作常指针使用时,a是第0行的指针,*a是第0行的第一个元素的指针(二者值同,意义不同),**a是第0行的第0个元素的值。

这可以用以下**验证:

intmain(void);

printf("%d\n",**(a+1));

return0;

}输出肯定是4。这说明,既然a是第0行的指针,那么a+1就是第1行的指针,*(a+1)则是第1行第0个元素的指针,**(a+1)当然就是第1行第0个元素的值4了……

8楼:听不清啊

c语言中二维数组的a代表是a数组的首地址(值与0行首地址同),所以*a不是首个元素,*a代表的是0行的首地址,**a才是对首个元素的引用。

9楼:双子牛总

胃口几幅画鸡骨头气温会偷偷去hgew

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

10楼:匿名用户

在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等同于一维指针。二者类型并不相同,只是在一定条件下可以转换。

11楼:匿名用户

我理解问题中的这个=楼主是指相等,而且是数值上相等。这是肯定的。*a实际是*(a+0)+0,也即是a[0]+0这个地址,和a一样,其数值也是这个二维数组的首地址。

但是二者含义可不同,不能直接相互赋值。a是行指针,即a是一个大小为i的数组,其元素也是数组,大小为j。*a由上面的解释,其实质是个列指针,指向a的第一个元素(大小为j的数组)的第0个元素。

12楼:匿名用户

#include "stdio.h"

main()

} 正确的写法应该是上面这样的。

这里涉及到2个问题:

1.数组声明的时候a[9]就是有9个元素的数组,a[10]就是有10和元素的数组

2.数组赋值的时候第一个元素的下标是从0开始的,即a[0],最后一个下标是声明时的数字-1,如:声明时:a[9],最后一个元素是a[8]。a[9]是超范围的。

13楼:

数组名a表示二维数组的首地址,*a就好比第一行的地址值a[0],a[0]表示&a[0][0]....

14楼:匿名用户

二维数组的指针比较特别,* 的作用是将行指针转换成列指针,数组名a是指向第一行的指针,*a则是指向第一行第一列的指针,根本含义上市不一样的,但是值都是a【0】【0】的地址

c语言指针:一个二维数组a[3][4],为什么*a会表示&a[0][0]呢?不是【a表示&a[0]

15楼:匿名用户

*a表示第0行第0列地址,a既是数组名,也是第0行的首地址;a[0]表示第0行0列的地址,*是取对象,&是取地址,*a[0]才表示值

16楼:贝蠡

*a默认为第0行第0列地址

c语言二维数组a,为什么a和(a+1)等

1楼 a 1 指针取得不就是地址吗 2楼 匿名用户 a 1 是定义的指针, 因为数组的起始地址a 0 可以用a来代替 所以a 1 和 a 1 是同一个地址 3楼 首先a代表整个数组的首地址没问题吧,a 1就是把地址下移, a 1 就是取其地址的内容。这回可以理解了吧! c语言中二维数组a i j 为...

C语言,定义二维数组a,则(a+1)表示什么a+5)表示什么

1楼 倒霉孩子改名啦 a 1 相当于a 0 1 , a 5 相当于a 0 5 已经越界了 c语言 二维数组 a 1 1 和 a 5 分别表达什么? 2楼 匿名用户 a 1 a 1 那么 a 1 1 a 1 1 a 5 a 5 c语言定义了一个二维数组a 5 3 用循环实现a 0 0 a 1 0 a ...

数学中为什么幂函数a可以为0指数函数中a却不可

1楼 匿名用户 指数 y a x a 0且 a 1 a等于0就没意义了,幂函数不一样y x a a 0时y 1 2楼 匿名用户 兄弟,幂函数的表现形式是y x a,a 0时,x 1 a 1时,x x,并以此类推 但是指数函数中,它的表现形式是y a x,a 0,0的x次方都是0,无研究意义,就类似分...