二维数组和指针的关系
2015-11-28 21:06
295 查看
在C/C++中,数组和指针有着密切的关系,但是二者是完全不同的数据结构。
二维数组是数组的数组,数组的每一个元素是一个数组。
1、那么怎么利用一个数组的访问方式来访问二维数组呢?
首先,定义一个二维数组
int iArr[2][3]={0,1,2,3,4,5};
我们可以用一个指向int型的指针变量来访问这个数组,下面代码是将数组一维化:
int*p=iArr[0];
上面的iArr[0]就是代表第一个数组的首地址,由于二维数组在内存中的存储也是先行后列的方式,所以第二行也紧跟第一行之后,这样就可以用p来访问数组的元素值了,访问方式有下标和指针的方式:
但是二维数组可以想当然的认为是二级指针吗?
#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;
}
二维数组是数组的数组,数组的每一个元素是一个数组。
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;
}
相关文章推荐
- 如何查看Android应用使用的内存
- DBSCAN算法
- 项目适配iOS9遇到的一些问题及解决办法(持续更新)
- x264 n-th pass编码时候Stats文件的含义
- HDU 5037 Frogs(数论)
- HFSS学习(一)计划
- mysql 插件开发
- JAVA基础算法实现
- administrator内置账户“ 网络无法访问,你可能没有权限使用网络资源,请与管理员联系...” 解决办法
- 如何查看Android应用使用的电量
- Linux命令学习笔记(1)----cat命令
- 用spark实现CNN,数据集:MSAR
- aop介绍
- C语言语句分类:大致可分为六大类
- linux小结之一:常见文件查找方法
- 使用adbWireless软件进行Android无线调试
- Learning OpenStack Keystone
- nyoj--108--士兵杀敌(一)(区间求和&&树状数组)
- 编写冒泡排序,可以排序整形数组,也可以排序字符串
- 《程序员面试宝典》—上海某大学校招试题(第三章)