二维数组和指针的关系

在C/C++中,数组和指针有着密切的关系,但是二者是完全不同的数据结构。

二维数组是数组的数组,数组的每一个元素是一个数组。

1、那么怎么利用一个数组的访问方式来访问二维数组呢?

首先,定义一个二维数组

int iArr[2][3]={0,1,2,3,4,5};

我们可以用一个指向int型的指针变量来访问这个数组,下面代码是将数组一维化:

int*p=iArr[0];

上面的 iArr[0]就是代表第一个数组的首地址,由于二维数组在内存中的存储也是先行后列的方式,所以第二行也紧跟第一行之后,这样就可以用p来访问数组的元素值了,访问方式有下标和指针的方式:
printf(“%d”,p[3]);
printf("%d\n",*(p+3));
最后输出的结果都是3。

但是二维数组可以想当然的认为是二级指针吗?

#include "stdafx.h"

#include<stdio.h>
int main(int argc, char *argv[])
{
	int a[2][3] = { 1, 2, 3, 4, 5, 6 };
	int*p = a[0];
	printf("%d\n", p[3]);

	//int**p = a;
	//出错,error C2440: “初始化”: 无法从“int [2][3]”转换为“int **”
	
	//int(*pa)[3];//说明pa是一个数组指针,
	//指向一个数组元素为int类型并且元素的个数为3的一个数组指针
	//括号不能少,少了就变成指针数组,代表数组的每一个元素是指针类型
	int(*pa)[3] = a;//二维数组的数组名是指向第一行数组的首地址,
	//可以用这种数组名或指针来访问二维数组的元素

	//访问第一行第二列的元素
	printf("%d\n", *(*(pa+1)+2));
	printf("%d\n", *(*(pa + 1) + 2));//输出都是6,想不明白,高手看到请指点

	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值