二维数组中a1和a1的值为什么都是地址

2020-11-26 06:32:34 字数 5412 阅读 8556

1楼:匿名用户

a[0]第0行的行地址

a[1]第1行的行地址

*a[1]第一行的第一个数。

希望下面的程序可以帮到你:

#include

#include

intmain(void);

printf("a=%d\t",a);

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

printf("*a=%d\t",*a);

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

printf("a[1]=%d\t",a[1]);

printf("*a[1]=%d\n",*a[1]);

system("pause");

return0;

}运行结果:

c语言中的二维数组里a+1和*(a+1)为什么都是地址

2楼:刘文正粉丝

二维数组, int a[10][20];

a是一个指针的指针, 即二级指针.

一个指针加一个数, 当然还是指针(即a+1是指针)

取值一个二级指针, 是一级指针(即指针), 所以还是指针, 不过类型发生了变化.

a+1的类型为int *[10].

而*(a+1)的类型则为int *, 也就是平常的指针.

如果你学习二维数组是用心, 你就会知道不存在二维数组, 二维数组其实是一个包含数组的数组, 即数组的每一个元素还是一个数组(这点有点像面向对象的思维).

所以a[0]就是取第一个元素值, 而第一个元素是数组, 所以其值仍是一个指针.

答了这么多, 一看问题, 发现是"地址".....地址和指针是一个东西.

3楼:zh呼啸而过

例如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个字节。

4楼:twinkleh丶

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

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

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

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

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

0表示列的移动

所以是1行0列的地址

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

取值二级指针是一级指针

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

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

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

5楼:tlier丿残刀

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

c语言二维数组与指针,我想知道为什么*(a+1).与显示中的a+1,所给出的地址是一样的,怎么理解?

6楼:

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] 定义为

;一个二维数组 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;

7楼:匿名用户

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是指针,运算结果与前者相同。

8楼:匿名用户

二维数组是两层指针,这个你该明白

*(*(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个元素的地址

9楼:未来需努力点缀

楼主你好

你这里的a是数组名

数组名a是数组a[2][3]的首地址 也就是a[0][0]的地址那么a+1就是a[0][1]的地址 *(a+1)对应的就是a[0][1]

希望能帮助你哈

10楼:杨复兴

×(a+1)是一个指向 指向(a+1)所以它和a+1的地址是一样的

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

11楼:匿名用户

它们只是值相等,但类型不相等,不能说它们相等。

a+1是int **类型,指向的是数组a的第二行的起始地址; *(a+1)是int *型,指向的是数组a的第二行第一个元素的地址。

c语言中多维数组地址**(a+1)怎么详细理解?

12楼:匿名用户

*(p+n)等效于p[n]

所以**(a+1)

=*(*(a+1)+0)

=*(a[1]+0)

=a[1][0]

二维数组a,划线的两句话矛盾吗?a+1的值是地址的首地址?

13楼:谭智轩

不矛盾啊。一维数组和二维数组,对一维数组,a就是首地址,a加1就是首地址后移一位,当然指向a[1]了。二维数组的话,a+1就是第二行的首地址。a[1]加1就是第二行第二列

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

14楼:金色潜鸟

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

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

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

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

------

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

15楼:匿名用户

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

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

16楼:匿名用户

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

17楼:哈高妮萨

a[0]等同于同*a。

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

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

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

为什么c语言中二维数组的数组名a和*a表示的是同一个值?

18楼:匿名用户

当定义二维数组a[m][n]时,数组名可以认为是二维指针,其指向二维数组的首地址。

于是a的值就是首地址的值。

而*a,就是a[0],a[0]是第一行的标记,代表第一行的首地址。

在二维数组中,所有元素都是紧密排列的,这样整个数组的首地址,第一行的首地址,和第一个元素的首地址,即a, a[0], &a[0][0] 都是相同的。

于是a和*a的值是相同的。

19楼:匿名用户

当a是二维数组名时,a即&a[0],而*a即a[0]

两者的显式的值是相同的,但是基类型是不同的

20楼:匿名用户

*a表示数组的第一个元素的值,而二维数组的第一个元素是一个一维数组。这个一维数组的首地址是a[0],所以a = *a = a[0] = &a[0][0]

21楼:艾珽

首先a[0]和*(a+0)等价,且a[i]只是一个地址(如同一维数组名只是一个指针常量)

这些你得知道。

在a[m]中,

a为二维数组名,值为0行首地址;

a[0]和*a为0行0列的地址。

*(a[i]+j)和*(*(a+i)+j)才是a[i][j]的值。

c语言二维数组中a【i】、&a【i】、a+1、*(a+1)代表的含义一样吗?如果一样为什么?

22楼:折柳成萌

它们只是值相等,但类型不相等,不能说它们相等。

a+1是int **类型,指向的是数组a的第二行的起始地址; *(a+1)是int *型,指向的是数组a的第二行第一个元素的地址。

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 为...