前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >指针与数组(1)

指针与数组(1)

作者头像
HeaiKun
发布2020-07-07 11:18:13
3360
发布2020-07-07 11:18:13
举报
文章被收录于专栏:HeaiKun

C语言中指针算是核心了吧,掌握了指针基本上就掌握的了C语言的精髓,不过要想真正掌握指针,还是需要仔细认真的钻研一番的。这里我就浅谈一下我对指针的理解吧。以下是我的个人理解,有不同见解的欢迎和我一起探讨。

什么是指针?

在说指针之前先说一下什么是地址吧。我们可以把计算机的内存比作蜜蜂的巢,由一个一个的小格子构成,内存中的小格子都是按顺序进行编号的,这些编号就是我们说的地址了。每一个小格子都可以存放一个字节(byte)大小的数据,包含8个位(bit)。指针呢,简单的说就是一个地址。

大家都知道指针变量就是存放地址的变量。这句话说的很对,但是太表面了。我们思考一个问题“如果指针仅仅是存放地址的变量,那么为什么指针变量还要有类型?”我的理解是指针是存放一定大小空间的首地址的变量。一个指针变量不仅存了一个地址还定义了这指针指向空间的大小。

指针和数组

说到指针和数组,可以说这两个概念之间的关系密不可分,如果你不能理解其中一个概念,也就不能理解另一个概念。

举个栗子

我们有一个数组 :int arr[5] = {0,1,2,3,4}; 然后我们获取中间的元素arr[2]的值时有两种操作方式。

  1. arr[2];
  2. *(arr+2)

那么对于二维数组的话两两组合就有四种操作方式了。

对于数组需要注意两点

  1. C语言中只有一维数组,而且数组大小必须在编译的时候就确定一个准确的值,数组中的元素可以是任何类型。所以二维数组等多维数组就是数组的嵌套构成的。
  2. 对于一个数组,我们仅仅能做的就是确定数组的大小,获得指向数组下标为零的地址

其余的操作都是以指针的形式来进行操作,而这些操作就要用到指针的运算了,下面我们讨论重点内容:指针运算。

指针的运算

指针的运算包括指针与常数的加减,数组内的指针之间的减运算等。

指针与常数的加减:这个要注意指针的类型,指针变量加1,指针所指向的地址就增加一个类型的大小。如:一个int型指针p,p+1就是p指向的地址往后移动一个int型的大小,也就是4个字节。如果p指向的地址是0x00,那么p+1指向的地址就是0x04。同样,如果类型是是一个结构体,那么也是往后移动一个结构体的大小。

指针与指针的减:这样的操作一般是在数组,结构体等具有连续地址的空间里面进行运算的。假如有int arr[10];那么arr[5] - arr[3] 就等于2,意思就是相差两个int 空间的大小,当然,两个指针相加没有任何意义,就如同两个不相干的指针相减一样。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HeaiKun 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档