C语言中二维数组的数组名与 ”&数组” 的区别

(1) 测试代码 :

#include<stdio.h>

int main()

{

    int i, j;

    int a[5][5] = { {0,1,2,3,4},{5,6,7,8,9},{10,11,12,13,14},{15,16,17,18,19},{20,21,22,23,24}};

    for(i=0;i<5;i++)

    {

        for(j=0;j<5;j++)    

        {

            printf("%-3d ",a[i][j]);

        }

        printf("\n");

    }

    printf("\n\n");

    printf("a = %p\n",a);               // 000000000064FDE0

    printf("&a = %p\n",&a);           // 000000000064FDE0

    printf("a+1 = %p\n",a+1);       // 000000000064FDF4

    printf("&a+1 = %p\n",&a+1);   // 000000000064FE44

    return 0;

}

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在C语言,一维数组二维数组数组字与数组内存地址有着密切的关系。 对于一维数组来说,数组字就是该数组的首元素的内存地址。例如,如果有一个int类型的一维数组a,那么a的数组字就是&a[],即a[]的内存地址。 对于二维数组来说,数组字也是该数组的首元素的内存地址。但是,由于二维数组是由多个一维数组组成的,因此数组字实际上是指向第一个一维数组的指针。例如,如果有一个int类型的二维数组b,那么b的数组字就是&b[][],即第一个一维数组的首元素的内存地址。 需要注意的是,对于二维数组来说,数组字和数组字+1所指向的内存地址之间的差值并不是1,而是一个一维数组的大小。这是因为在内存二维数组是按照行优先的顺序存储的,即相邻的两个元素在内存地址差值等于一行元素的大小。 综上所述,一维数组二维数组数组字与数组内存地址之间的关系是非常密切的,理解这种关系对于编写高效的C程序非常重要。 ### 回答2: 一维数组C语言是连续存储的一组相同类型的数据元素。数组实际上是指向数组首元素的指针。由于数组是连续存储的,数组数组内存地址是一致的。 例如,声明一个一维数组arr,如果arr的内存起始地址为0x1000,且每个元素占用4个字节,则数组元素arr[0]的地址为0x1000,arr[1]的地址为0x1004,arr[2]的地址为0x1008,依此类推。因此,arr指向数组首元素arr[0],arr的内存地址即为数组的起始地址0x1000。 二维数组可以看作是一维数组数组。在内存,一维数组二维数组都是按照行优先的方式依次存储。对于一个二维数组数组指向第一行的首元素,而第一行又是一个一维数组。因此,二维数组数组与第一个一维数组的首元素地址相同。 例如,声明一个二维数组matrix,如果矩阵的内存起始地址为0x2000,且每个元素占用4个字节,则matrix[0][0]的地址为0x2000,matrix[0][1]的地址为0x2004,matrix[1][0]的地址为0x2008,依此类推。对于matrix来说,matrix指向第一行的首元素matrix[0][0],matrix的内存地址即为数组的起始地址0x2000。 综上所述,一维数组二维数组数组数组内存地址的关系是一致的。数组指向数组首元素的指针,而数组元素在内存是连续存储的,因此数组数组内存地址相同。 ### 回答3: 在C语言数组代表的是数组的首元素的内存地址。对于一维数组数组字即为该数组的内存地址。例如,对于一个为arr的一维数组,arr代表的是该数组的首元素的内存地址。 对于二维数组数组字也代表二维数组的首行的内存地址二维数组在内存以连续的一维数组的形式存储。因此,对于一个为arr的二维数组,arr[0]代表二维数组的第一行的内存地址数组字可以通过在变量前加上&符号来取得该数组的内存地址。例如,&arr[0]和arr在结果上是等价的,都代表了该数组的首元素的内存地址。 需要注意的是,即使二维数组在内存是连续存储的,但二维数组字和一维数组字并不等价。对于一个为arr的二维数组,arr代表的是二维数组的首行的内存地址,而&arr则代表了整个二维数组的内存地址。 综上所述,数组字与数组内存地址的关系是:数组代表数组的首元素(一维数组)或首行(二维数组)的内存地址。可以通过在变量前加上&符号来取得该数组的内存地址

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值