【C 语言难点突破】指针入门讲解
指针
内存的概念
在说另新人感到发指的指针之前,我们先聊一聊内存这个概念。
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。 所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是 1 个字节。 为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
而内存单元的编号通过地址线通电或者断电产生的数字信号 0/1 的组合来表达内存单元的编号,如生活中 32 位,64 位机器,就是指的是多少跟地址线,一根地址线表达一个 0 或者 1,32 位就是 32 跟地址就是 32 个 0 或者 1 组成的地址长度,这里地址编号由 0x(区别十进制和十六进制用的像前缀一样的东西!)+8 个十六进制(等效为 32 个二进制)
变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。 取出变量地址如下:
&num 是取出 num 的地址,注意:这里 num 的 4 个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址),printf 打印地址,%p 是以地址的形式打印。
指针变量的定义
上面我们已经解释的指针到底是什么,不要把它想得过于困难,过于高大上,简单认为其实就是一段数字而已。
注意:这里使用指针变量的和上面定义指针变量的完全不一样!
把地址存储到指针变量并不是我们最终的目的,就像你的家庭地址,并不是为了单纯的记住,而是有一天可以去你家找你请你吃饭什么的,所以这里的 p 为存放 num 地址的指针变量,pc 这个是解引用操作符,要清晰的区分两个的作用!定义时的是格式需要,代表这个类型是指针变量类型;使用时的*是解引用操作符,通过 p 存储的地址在内存中找到地址对应的变量,来进行其他操作的!储存是为了更好的找到!
指针变量的大小
指针变量的大小,不取决于指针变量指向的变量类型而取决于多少位的平台!因为在多少位平台就有多少位二进制来表达你的数据地址!我们算的大小不是数据的大小,而是数据地址的大小,数据地址大小又取决于多少位平台下多少个 bit 位的表达,sizeof 用字节表示大小,所以地址大小用字节表示只有 4 或 8 的区别!
版权声明: 本文为 InfoQ 作者【Geek_65222d】的原创文章。
原文链接:【http://xie.infoq.cn/article/914d7926e8d221dc07eb8071c】。未经作者许可,禁止转载。
评论