二维数组与指针

二维数组
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[4][2] = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
printf("arr=%p,arr+1=%p\n", arr, arr + 1);  //输出显示二维数组arr的地址和一维数组arr[0]的地址是相同的,均为数组首元素的地址,其值和&arr[0][0]相同
printf("arr[0]=%p,arr[0]+1=%p\n", arr[0], arr[0] + 1);  //arr[0]指向4字节长的数据对象,对arr[0]加1导致它的值增加4
printf("*arr=%p,*arr+1=%p\n", *arr, *arr + 1);//*arr和arr[0]是一样的
printf("arr[0][0]=%d\n", arr[0][0]);
printf("*arr[0]=%d\n", *arr[0]);  //arr[0][0]和*arr[0]的值是相同的
printf("**arr=%d\n", **arr);  //二维数组名必须两次取值才可以取出数组中存储的数据
printf("arr[2][1]=%d\n", arr[2][1]);
printf("*(*(arr+2)+1)=%d\n", *(*(arr + 2) + 1));  //分两步取二维数组元素可采用*结合+
system("pause");
return 0;
}

结果:

0039FA2C      0039FA34

0039FA2C      0039FA30
0039FA2C      0039FA30

1

1

1

 6

 6

arr0039FA2Carr+10039FA34
arr[0]0039FA2Carr[0]+10039FA30
*arr0039FA2C*arr+10039FA30
从上表可以看出:arr、arr[0]、*arr的输出是一样的,它们都指向数组arr的起始地址,三者加1分别加了8,4,4这个结果的不同点在于?

arr[0][0]1
*arr[0]1
**arr1
arr[2][1]6
*(*arr+2)+1)6
从上表可以看出取数组中的某一元素有好几种方法:

(1)可以直接用arr[i][j]来获取i行j列的元素

(2)也可以采用指针*arr[i]来获取第i行的第一个元素

(3)也可以采用两次解引用来获取数组第一个元素

(4)也可以采用*和+的配合*(*arr+i)+j)来获取i行j列的元素。





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值