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

作者&投稿:紫博 (若有异议请与网页底部的电邮联系)
为什么C语言中二维数组的数组名a和*a表示的是同一个值?~

当定义二维数组a[M][N]时,数组名可以认为是二维指针,其指向二维数组的首地址。
于是a的值就是首地址的值。
而*a,就是a[0],a[0]是第一行的标记,代表第一行的首地址。
在二维数组中,所有元素都是紧密排列的,这样整个数组的首地址,第一行的首地址,和第一个元素的首地址,即a, a[0], &a[0][0] 都是相同的。
于是a和*a的值是相同的。

你可以大致理解为a[ ][ ] 为 **a 【不过两者并不相同,只是有些特性相同

*a 则可以取得指向一维数组的指针,也就是a[0]的地址而非a[0][0]
**a才是a[0][0]的地址

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

int main(void){
    int a[2][3]={1,2,3,4,5,6};
    printf("%d
",**(a+1));
    return 0;
}

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



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

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


在c语言二维数组中,a【0】为什么是第一行的第一个元素,列不是不能...
这是错误的认识。在C语言中,若a声明为二维数组,则a[0]所代表的是一个地址,指向a[0][0]处,而不是元素。

在C语言中,二维数组元素在内存中的存放顺序是 A按行存放 B按列存放 C...
二维数组在内存中按行存放。二维数组在c语言中的定义为:int a[x][y]。具体理解为二维数组a,有x行数据,每行数据有y个。解释:当我们在进行数据的存取时,在无x的条件下不可能取出值。但是在没有y的条件下,可以通过地址取出x行的某个值。当我们知道x的值,代表我们能确定这一行的首地址,...

C语言的二维数组中a[i]+j这个j为什么表示的是字节数?
如果有二维数组 short int a[4][5];那么 a[i] 就不是下标变量,而是地址:&a[i][0]所以 a[i]+j 是 a[i] 这个单元所在地 的 下面 的 第 j 个 元素的 地址 a[i]+j 等于 &a[i][0] + j * sizeof(short int) -- 加的这项东西 就是 j乘2 个 字节。老...

在计算机C语言中,二维数组,a[][3]={1,2,3,4,5,6,7,8,9};a[0][0]=...
二维数组初始化时,可以采用上面这种方式,系统会根据总个数和第二位的长度算出第一位的长度。 上面数组中总共有9个元素,每行有3个元素,可以确定行数是3,也就是a[3][3]。另外数组中的元素是按行存放的,先存第一行,再放第二行,依次存放。还有就是数组的下表是从0开始,如果有3个元素...

C语言 二维数组&a[i]的问题
二维数组中,a[i][0]表示这个数据,a[i]表示的是a[i][0]这个数据在数组中的地址,&a[i][0]表示的是这个数据在内存中分配到的地址, 既a[i]=&a[i][0]。

C语言,编写程序求出二维数组a的两条对角线上的元素之和
1、首先在电脑中打开visual C++ ,定义数组和变量,如下图所示。2、然后输入九个数,如下图所示。3、接着累加:for(i=0;i<3;i++) \/*使用循环进行计算对角线的总和*\/,如下图所示。4、最后输出结果:printf("the result is :%d\\n",sum);\/*输出最后的结果*\/return 0,如下图所示。5、...

C语言中,定义了二维数组a[N][N],当调用函数fun(a)时,形参为什么不能是*...
a表示是数组a的首地址,(*a)[N]表示二维数组中的一维的首地址如:a[3][3]中a[3]表示a[3][0]a表示数组首地址,**a就不代表数组中的地址了。

c语言中,例如一个二维数组a[3][4],则a与a[0]代表的意思一样吗?a与*...
因为第一个例子是整数类型,每一个a[x][x]代表确切的值。a就是a[0][0],a[0]其实也是a[0][0],所以是相等的。再说第二个例子:定义个字符串数组,其中每个字符串最多有10个字符(说道这里应该明白为什么是错的了吧?),你定义的char *p只是一个单字符指针,却企图将str代表的整条字符串的...

若C语言中定义了二维数组a[2][2],则a中的元素为(按存储顺序写)?_百度...
a[0][0],a[0][1],a[1][0],a[1][1],数组在内存中是顺序存储。

c语言中二维数组a【i】【j】这个i指的是横向的还是竖向的。
嗯,这个很好记,学过数学没?学过坐标没?(x,y),x在前,为横坐标;y在后,为纵坐标。引申一下就可以了。

获嘉县17888025081: c语言中二维数组地址疑问 -
郴汪抗癌: 从二维数组的角度来看,a代表二维数组首元素的 地址,现在的首元素不是一个整型变量,而是由4 个整型元素所组成的一维数组,因此a代表的是首 行的起始地址(即第0行的起始地址,&a[0]),a+1代 表a[1]行的首地址,即&a[1].因此a[0]代表...

获嘉县17888025081: C语言中二维数组行指针是什么
郴汪抗癌: 就是指向每一行的指针,比如说二维数组a[2][3]; a[0]代表的是二维数组第零行的首地址相当于&amp;a[0][0]; a[1]代表的是二维数组第一行的首地址相当于&amp;a[1][0]; a[0]+1代表的是二维数组第零行,第一列的地址相当于&amp;a[0][1]

获嘉县17888025081: C语言数组首地址相关问题!! -
郴汪抗癌: 若a是一维数组名,我们知道*a就是a[0],就是*(arr+0).因为a是数组的首地址,*a就是取首地址所指元素,就是数组的第一个元素. 同样的道理,a是二维数组名时,*a也是取a的第一个元素,但是此时a所指的元素是一个一维数组,所以,实...

获嘉县17888025081: C 语言中 二维数组,里面地址的问题 -
郴汪抗癌: 那a+1则是a[1]的首地址,即a[1][0]的地址." 正如你以上所说, a是行,加了一行就是a[1]. *a[0][0]+1是a[0][1]. 再给你打个比方,数组名是你家门牌号,+1就是你邻居.怎么可能是你的房间吗?

获嘉县17888025081: **a在C语言中表示a[0]a[0],为什么? -
郴汪抗癌: 举例说明,如果定义了一个二维数组a[10][10],则a本身代表着这个数组的首地址,其本质就是定义了一个二维指针,a[m][n]与*(*(a+m)+n))表示相同意思,都表示取第m行第n个变量,m和n都取0时,就是问题所示. 建议阅读下csdn上有关指针和数组的博客,有很多解释,这上面的说明还很口语化.

获嘉县17888025081: C语言二维数组 -
郴汪抗癌: a[0]为第一行的首地址 a[1]为第二行的首地址 a[2]为第三行的首地址

获嘉县17888025081: c语言指针问题,不理解其中的*a与a等价的关系. -
郴汪抗癌: 假设这个二维数组的首地址的值是2000H的话 表示形式 含义 地址 a 二维数组名,指向一维数组a[0],即 第0行首地址 2000H a[0],*(a+0) 第0行第0列元素的地址 2000H*a,&a[0][0] a,a[0],*(a+0),*a,&a[0][0]是相等的结论成立.问题补充:注意 a是一...

获嘉县17888025081: 在C语言里面 a与*a意思有什么区别
郴汪抗癌: a表示数组的首地址,*a表示a[0]的首地址,这2个地址是一样的,但是a+1与*a+1这2个的地址就不一样了,一个表示a[1]的地址,一个表示a[0][1]的地址

获嘉县17888025081: 关于指针和二维数组的问题 -
郴汪抗癌: a[i]是个地址,看来你二维数组一点都没弄明白,这样说吧,a[3][3],a[0]:第0行首地址;a[1]第一行收地址,以此类推,a[1][1],第一行第一列的值;就像*(*(a+i)+j),这个才是值,二维数组就是很多组一维数组堆在一起,这样你就不认识了?就像一维数组a[i],a是首地址,a[i]是值,二维(a[i])[j]同样,a[i]是地址,a[i][j]才是值,还有,严格意义上说,a+i才是a[i],他们都是行指针,而*(a+i)其实是&a[i][0],他是个列指针,消息来自华夏联盟

获嘉县17888025081: c语言中二维数组*(a+i)的意义 -
郴汪抗癌: *(a+i)——二维数组第i行(从0起算)第一个元素的地址.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网