C语言指针详解(1)-概述

指针是C语言的精华,用指针可以写出更加快速高效的代码,因为指针更加接近硬件,指针附带的开销一般不像别的操作符那么大,而且应用起来也更加灵活。
(1)理解指针
为了形象的理解指针的含义,我们举个例子:我们写代码时会定义变量,假如定义 int a ;初始化a = 4;这里a是一个代号就和名字一样,4就是存在这个代号里的变量,计算机里面变量都是存放在内存里的,假设内存是以字节为单位并且有地址的,我们要说的指针就是这个地址,int是整型变量,一般分配4个字节,即给a这个代号的整型变量分配4个字节,来存放4这个数。就像在仓库一样,假如每个仓库都有一个仓库号,就和计算机的内存地址一样,每个仓库都有自己的名字,就和变量a的名字一样,而且仓库里面都存放这不同的东西,就和4这个数一样,例如大米粮仓这个代号的仓库存放了3吨大米,这个仓库的编号是6号仓库,那么我们就可以和计算机存放数据类比起来。我们要索引这3吨大米的时候,可以说大米粮仓,或者也可以先去找6号仓库,然后六号仓库里面放的就是这3吨大米,这个编号6就是地址。很明显如果所有仓库都是按好排列的,那么我们根据编号来找速度更快,效率更高,但是我们并不知道6号仓库里是什么,所以记录的时候要写大米粮仓,这和计算机存储数据是一个原理。

经过举例子我们大概理解了计算机地址的原理,下面我们详细谈一谈指针:指针就是存储单元的地址,要和存储单元的内容分离开,内容是存储单元里面实际有的东西,而地址是找到存储单元的编号。如图所以,假设程序定义3个整型变量i,j,k,在程序编译时,系统可能分配地址为2000~2003的4个字节给变量i=3,2004~2007的4个字节给变量j=6,2008~2011的4个字节给变量k=i+j(注意不同的编译系统在不同次的编译中,根据自身内存状况,分配给变量的存储单元的地址是不一样的)。当执行语句k=i+j时,就从2000~2003字节取出i的值3,再从2004~2007字节取出j的值6;然后将他们相加后再将和9送到k所占内存2008~2011字节单元中。这种变量名访问的方式叫做“直接访问”。
内存存储示意图

(2)声明指针
通过在数据类型后面跟星号(*),再加上指针变量的名字可以声明指针,下面声明一个整数和一个整数指针:

 int num;
 int *pi

(注:星号两边的空白符无关紧要,左右有或没有都可以)
我喜欢用int* pi命名,因为这样看起来更像这个类型是int*,而变量名为pi,方便理解,星号是一个重载过的符号,因为它也可以用在乘法和解引指针上。下图说明了内存分配是什么样的,在此不再赘述。这三个内存单

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值