1.输出都相同,都是地址
#include <stdio.h>
main()
{int a[5][10];
printf("%d %d %d \n",&a,a,*a);
}
为什么 啊???????
2维数组*a与a与&a为什么相同啊!
那么&a就是第一个数组的手地址,a是整个二维数组的手地址,刚才不是说了,而维数组的手地址也就是第一个一维数组的手地址,*a是一个指针,当然先要指向数组的首地址阿,在c语言中有这样一句话:指针就是地址“可以看到他们三个表示的是同一个东西 希望对你有帮助了 ...
为什么C语言中二维数组的数组名a和*a表示的是同一个值?
而*a,就是a[0],a[0]是第一行的标记,代表第一行的首地址。在二维数组中,所有元素都是紧密排列的,这样整个数组的首地址,第一行的首地址,和第一个元素的首地址,即a, a[0], &a[0][0] 都是相同的。于是a和*a的值是相同的。
为什么C语言二维数组a[2][2], a和*a输出是相同的,都表示一个地址_百度...
二维数组可以理解为几个指向一维数组的指针组成指针数组。所以从类型上讲,a是指向指针的指针,*a是指向一行一维数组的指针。但a作为数组名,又表示了数组首地址(在内存中元素地址是连续的)。a是第一行数组首地址。所以值相同 (注意只是值相同,比如a[n]和(*a)[n]意义就不一样,一个表示第n行...
为什么二维数组a[i] 和&a[i]相等
即a[0][0] 是二维数组的第一个元素,也是第 0 行的第一个元素,他们的位置是一样的所以地址也必然是相同的。a = a[0] = &a[0] = &a[0][0];举例: i=1;a[i] 就表示的是第 i 行的首地址,也就是 a[i][0]这个元素所在的地址;&a[i] 取得a[i][0]的地址,它和首地址是...
...为什么a和*a的值是一样的?他们两者之间又什么关联么?
a 是二维数组的首地址,*a等价于*(a+0)等价于a[0]也等价于0[a],也就是第0行的首地址,当然a和*a的值是一样的,但二者的类型是不一样的。include<stdio.h> int main(){ int a[3][4];printf("a = %d\\tsizeof(a) = %d\\n",a,sizeof(a));printf("*a = %d\\tsizeof(*a)...
c语言中数组中,为什么a与&a 为什么地址相同
因为他就是这样规定的呀。单独的a 就代表数组第一个元素的地址,
C语言中,a为一个二维数组,为什么(&a[0])[2] 与(&a[2])[0]输出的结果一...
……以此类推。(&a[0])[2] 表示的是a[0]指向的地址再往后偏移2个a[0]大小的位置,即移动了两个一维数组的位置,所以等价于指向a[2]这个一维数组,再经过下标访问(&a[2])[0],即为a[2][0]。所以该表达式和(&a[2])[0]实际上访问的都是同一个内存地址上的值,因此输出结果相同。
C语言、二维数组指针中的 * 和 &
1、我看了你说的这两页,书上的原话是这样的:“在二维数组中,a+i,*(a+i),&a[i],&a[i][0]的值相等,即他们都是同一地址值”,要注意这个字眼“地址值”,也就是说,这几种表达方式并不是内存中存的数值,而是存放数组的地址的值,首先要弄明白,首地址这个概念,如果只写数组名,就...
c语言 为什么*a和a指向同一个地址?*a不是取地址里面的内容吗,就是取值...
c语言里二维数组是一维数组所组成的数组 short a[3][4]; 有3个元素,每个元素都是由4个short组成的数组,注意,每个元素都是数组 a就是a[0], 有上面说的可知,a[0]是个数组,那自然就是个地址了 可以再加一句:printf("%d\\n",**a); \/\/ 这个就是a[0][0]了 ...
实在想不明白a和&a为什么是相等的。&a是a的地址啊,&a=a,岂不是相当于...
a本身就是这个数组的首地址了 &a同样是这个数组的首地址 所以值是一样的 其实 可以这样理解, a[0]是值, a和&a[0]一样是地址,那么 系统不可能再开一个新的内存 来存a的地址 这样的话就无穷无尽了 所以 这个可以认为是一种约定,对于数组 &a和a一样值 都是首地址,只不过类型不同。