• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 直观理解C语言中指向一位数组与二维数组的指针

直观理解C语言中指向一位数组与二维数组的指针

作者:永远的晴天 字体:[增加 减小] 来源:互联网 时间:2017-05-28

永远的晴天 通过本文主要向大家介绍了c语言指针数组,c语言二维数组指针,c语言函数指针数组,c语言中数组指针,c语言指针指向数组等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

一维数组和指针:
对于一位数组和指针是很好理解的:
一维数组名:
对于这样的一维数组:int a[5];  a作为数组名就是我们数组的首地址, a是一个地址常量 .
首先说说常量和变量的关系, 对于变量来说, 用箱子去比喻再好不过了, 声明一个变量就声明一个箱子,比如我们开辟出一个苹果类型的箱子, 给这个变量赋值就是把盛放苹果的箱子中放入一个实实在在的苹果, 这就是变量的赋值. 
而对于数组来说, 就是一组类型相同的箱子中,一组苹果箱子, 可以放入不同的苹果.
一维数组空间:
变量被声明后, 我们操作编译器, 对我们的C源文件进行编译, C在编译的时候 就会给我们的变量开辟相应的空间, 而对于数组而言, 开辟的空间是连续的.   我们把每个空间叫做存储单元, 每个空间都是有自己的编号, 就像我们现实生活中每户人家都有自己的一个门牌号一样, 系统数组空间地址是相连的, 并且我们的数组名就是一维数组首地址, 是一个地址常量.
指针:
既然数组的是占用连续的存储单元, 并且数组的首地址就是数组名, 我们可以通过指针变量来取出相应的地址.
指针变量, 就是这个箱子是专门存放其他箱子地址的. 我们可以把数组首地址给我们的指针变量. int a[7],*p; p=a;

201657162334919.jpg (396×188)

二维数组和指针的理解:

对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻.
我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, 二维数组,就是把一维数组中的内容中又存放了一系列的箱子, 这样就构成了二维数组.
这就像一辆火车, 火车有很多节火车厢, 每个火车厢里面有一趟座位, 那我们火车厢的编号和每个火车座位的编号就不同了.  例如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一个座位.

201657162403111.jpg (721×435)

指针数组指向二维地址(座位的地址,实际地址):
建立一个指针数组来引用二维数组中的元素:int *p[3], a[3][2],i,j; 从各种可以看到p是一个数组名, 在定义时系统给他开辟3个连续的存储单元; 在这个前面加上*号表示, 数组的基本类型为int的指针类型. 我们可以通过for循环让这个数组里面的指针指向每排"座位"的首地址:

201657162430649.jpg (337×319)

这个数组可以理解为是"座位"地址类型数组.
而下面我们定义的这个数组: 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是一个行地址变量.
以上就是对二维数组和指针的理解.
        

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C语言 指针与数组的详解及区别
  • C语言 指针与二维数组详解
  • C语言 指针数组详解及示例代码
  • C语言 数组指针详解及示例代码
  • 直观理解C语言中指向一位数组与二维数组的指针
  • 举例理解C语言二维数组的指针指向问题
  • 简单分析C语言中指针数组与数组指针的区别
  • C语言中二维数组指针的简要说明
  • C语言中的数组和指针汇编代码分析实例
  • C语言安全之数组长度与指针实例解析

相关文章

  • 2017-05-28C++中getline()和get()的方法浅析
  • 2017-05-28C++中typedef 及其与struct的结合使用
  • 2017-05-28C++设计模式编程中使用Bridge桥接模式的完全攻略
  • 2017-05-28浅谈C/C++中的static与extern关键字的使用详解
  • 2017-05-28详解C++中的一维数组和二维数组
  • 2017-05-28C++类中的常量介绍
  • 2017-05-28c++实现简单的线程池
  • 2017-05-28使用C语言实现最小生成树求解的简单方法
  • 2017-05-28C++学习小结之二进制转换
  • 2017-05-28纯C语言:递归二进制转十进制源码分享

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 求一个n阶方阵对角线元素之和。
    • 讲解C++中的枚举类型以及声明新类型的方法
    • dword ptr指令详细解析
    • c++中堆栈及创建对象示例代码
    • c++实现简单的线程池
    • 解析C++浮点数无效值的定义与无效值判定的小结
    • C连接Mysql数据库代码
    • 用C语言实现单链表的各种操作(二)
    • C语言中字符串常用函数strcat与strcpy的用法介绍
    • 浅析C语言中堆和栈的区别

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有