C语言教学--二维数组和指针的理解
对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻.
我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, 二维数组,就是把一维数组中的内容中又存放了一系列的箱子, 这样就构成了二维数组.
这就像一辆火车, 火车有很多节火车厢, 每个火车厢里面有一趟座位, 那我们火车厢的编号和每个火车座位的编号就不同了. 例如int a[3][4] ; 3节火车厢, 每个火车厢中有四个挨着的座位. 实际的座位的编号和我们的火车厢的编号这是我们要区分开的, 我们的火车厢编号就是a[0],a[1],a[2](从座位的角度上来看)
从外面看, 我们每节火车厢的地址, a+0,a+1,a+2, a就相当于一个行地址, 火车厢为单位的地址, a+1是跳到下一个车厢的首地址, 而a[0]就相当于是座位的首地址, a[0]+0就会跳到第0节车厢的第0个座位, a[0]+1就会跳到第0节车厢的第1一个座位.
指针数组指向二维地址(座位的地址,实际地址):
建立一个指针数组来引用二维数组中的元素:int *p[3], a[3][2],i,j; 从各种可以看到p是一个数组名, 在定义时系统给他开辟3个连续的存储单元; 在这个前面加上*号表示, 数组的基本类型为int的指针类型. 我们可以通过for循环让这个数组里面的指针指向每排"座位"的首地址:
这个数组可以理解为是"座位"地址类型数组.
而下面我们定义的这个数组: int a[3][2], (*prt)[2] 为行指针数组(火车车厢数组). 这样我们可以把每节"车厢的地址"放入到我们的行指针数组变量中了.
这样我们可以把a这个行地址常量赋值给行地址变量 p=a. p+1等价于a+1,等价于a[1] 当p指向数组的首地址时, 可以通过以下形式来引用p[i][j]:
(1) *(p[i]+j)
(2)*(*(p+i) +j ))
(3)(*(p+i))[j]
(4)p[i][j]
p是一个行指针变量, 而二维数组名a是一个行地址变量.
以上就是对二维数组和指针的理解.
C语言教学--二维数组和指针的理解的更多相关文章
- C语言之二维数组与指针
二维数组: ][]; 二维数组实质上也就是一维数组,a[2][3]可看做一个2个元素的一维数组,这2个元素又是另一个数组,在内存中,它的排布如下: #include "stdio.h&quo ...
- 关于c语言二维数组与指针的个人理解及处理办法。
相信大家在学习C语言时,对一维数组和指针的理解应该是自信的,但是,我在学习过程中,看到网上一些博文,发现即便是参加工作的一些专业编程人员,突然碰到二维数组和指针的问题时,也可能会遇到难以处理的诡异问题 ...
- C语言 二维数组(指针)动态分配和释放(转)
C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按 ...
- 二维数组和指针(C语言)
二维数组和指针 二维数组和指针1.二维数组和数组元素的地址若有以下定义:int *p, a[3][4]; 1)二维数组a由若干个一维数组组成在C语言中定义的二维数组实际上是一个一维数组,这个一维数组的 ...
- 程序员之--C语言细节13(二维数组和指针,&*a[i][0]的理解,数组1[e]和e[1]非常可能你没见过)
主要内容:二维数组和指针.&*a[i][0]的理解.数组1[e]和e[1] #include <stdio.h> #define NUM_ROWS 10 #define NUM_C ...
- c语言编程-----指向二维数组的指针
c中如何返回一个指向二维数组的指针 #include <stdio.h> #include <stdlib.h> #define COUNT 3 typedef int (*M ...
- 对二维数组使用指针进行操作的探索(C语言)
/* Name: 对二维数组使用指针进行操作的探索 Copyright: Author: lingr7 Date: 01/12/18 11:55 Description: */ #include< ...
- c语言中双维数组与指针的那点事儿
说起c语言的指针,估计对c语言只是一知半解的同志们可能都会很头疼,尤其它跟数组又无耻的联系到一起的时候,就更加淫荡了!!! 怎么说呢,就是有一点规定:(或准则) 数组名可以看成是指向数组头元素的指针, ...
- C/C++——二维数组与指针、指针数组、数组指针(行指针)、二级指针的用法
本文转载自:https://blog.csdn.net/qq_33573235/article/details/79530792 1. 二维数组和指针 要用指针处理二维数组,首先要解决从存储的角度对二 ...
随机推荐
- python基础知识3——基本的数据类型2——列表,元组,字典,集合
磨人的小妖精们啊!终于可以归置下自己的大脑啦,在这里我要把--整型,长整型,浮点型,字符串,列表,元组,字典,集合,这几个知识点特别多的东西,统一的捯饬捯饬,不然一直脑袋里面乱乱的. 一.列表 1.列 ...
- WAMPP安装后mysql无法启动
上午 10:23:42 [mysql] This may be due to a blocked port, missing dependencies, 上午 10:23:42 [mysql] imp ...
- protobuf框架简介
protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台.google 提供了三种语言的实现:java.c+ ...
- 配置移动前端开发调试环境(nodejs+npm+weiner的安装和配置使用)
这段时间发现做移动端的开发调试是一大难题,网上逛了逛发现有一些工具可用,如chrome的远程调试,实际测试过程中我始终调试不成功,听说被墙后是不行的,所以最终找了如下的方法. 因为基于nodeJS环境 ...
- Office 365 系列五 -------- Imap邮箱迁移步骤
当客户购买了我们的Office 365之后,第一个功能必然是会用我们的企业邮箱,如果企业之前是用 263.腾讯.网易等的邮件厂商的话,必然会涉及到邮件的迁移, 其实说到邮箱迁移,我们办法很多,如果人数 ...
- ROS下创建第一个节点工程
1.创建工作区 mkdir catkin_ws cd catkin_ws mkdir src 2.在src目录下创建包Myrobot,后面所跟roscpp rospy为依赖包 catkin_creat ...
- python安装tkinter
python2安装tkinter sudo apt-get install python-tk python3 安装tkinter sudo apt-get install python3-tk
- 微信小程序 wx.getUserInfo 解密 C# 代码
花了6小时,弄出来的代码.网上的是PHP代码 public static string DecodeUserInfo(string raw, string signature,string encry ...
- 通过pinyin4j.jar将(汉字拼音混合字符串)转化成字母首字母
通过pinyin4j.jar将(汉字拼音混合字符串)转化成字母首字母 例如 我的中国心 ==> wdzgx 我的中国心ya ==> wdzgxya woai我的中国 ==> w ...
- svn:ignore eclipse开发一般忽略文件
target.project.classpath.settings