【C语言】数组名&地址&地址中的值的访问

数组名&地址&地址中的值的访问
1 一维数组
一维数组名输出的是地址,相应的“*数组名”,输出的是这个地址指向的数字。
比如:int matrix[5];
数组名matrix表示的是这个数组的首地址,而*matrix表示的是这个首地址指向的值。
2二维数组
二维数组数组名表示的是第一行的地址,相应的“*数组名”表示的是第一列的地址,而**数组名表示的是第一行第一列指向的值。
二维数组 有2级指针,第一级就是数组名,表示行,移动的大小以行为单位;第二级就是*数组名表示列地址,移动的大小以列中的基本数据类型为单位

int main()

{

    int matrix[3][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};

    printf("%p",matrix);

    printf("%p",*matrix);

    printf("%d",**matrix);

    return 0;

}

二维数组名 matrix和 *matrix的输出结果是相同的,而**matrix指向的是matrix地址处存放的值 1.

所以 matrix+ 2表示的是指向第一行的指针指向了下2行;

而 (*matrix + 2)表示的是*matrix处的列指针向右移动了2位

所以,如上 *(*matrix + 2)输出的值应该是 3,第一行的列指针向右移动了3位。


以此类推,三维数组:

int matrix[3][5][6] = {0};

    printf("%p\n",matrix);

    printf("%p\n",*matrix);

    printf("%p\n",**matrix);

数组名表示的是第一维层地址,*数组名表示的是第二维行地址,**数组名表示的是第三维列地址。

公式  简化指针运算

*(*(a+1) + 2)  == *(a+1)[2] == a[1][2];


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值