指针是什么

要搞清指针是什么,首先我们说一下数据是怎样在内存中存储的,又是怎么读取的:
在程序中我们定义一个变量,那么在对程序进行编译时,系统就会给这个变量分配内存单元,即编译系统根据程序中定义的变量类型分配一定长度的空间(例如:整型变量分配4个字节、字符型变量分配1个字节)。内存区域的每一个字节都有一个编号,这就是“地址”。通俗点讲,这个编号(地址)相当于旅店的房间号,在地址所标志的内存单元中存放的数据则相当于旅店对应房间号中的客人。
由于通过地址能够找到所需的内存单元,可以说,地址指向该变量单元。打个比方说,一个房间的门口挂着一个房间号2008,这个2008就是房间的地址,或者说2008指向这个房间(这里的房间等价于变量单元)。因此,将地址形象化称为“指针”,意思是通过它能找到以它为地址的内存单元。

直接访问与间接访问:
1.直接访问:直接按变量名进行的访问。

//程序定义了整型变量i,在程序编译时,可能分配地址2000-2003的4个字节给变量i(在不同的编译系统不同次的编译中分配的变量的存储单元的地址是不相同的)
int i;
//通过变量名i找到存储单元的地址,从而对存储单元进行存取操作。程序经过编译以后已经将变量名转换为变量地址,对变量的存储都是通过地址来实现的。
printf("%d\n",i);
scanf("%d\n",&i);
2.间接访问:将变量i的地址存放在另一变量中,然后通过该变量来找变量i的地址,从而访问i变量。

//要采用间接访问的方式存取变量i的值,先找到存放“变量i的地址”的变量i_pointer,从中取出i的地址(2000),然后到2000字节开始的存储单元,访问i的值
i_pointer = &i;
i_pointer = 3;//关于&与的介绍会在后面的内容中提到
打个比方说,为了打开一个抽屉(变量i的内存单元),取出里面的物品(访问变量i的数据),有两种办法:一种(直接访问)是将A钥匙(变量名->变量地址)带在身上,需要时直接找出该钥匙打开抽屉,取出物品;另一种办法(间接访问)是将A钥匙(这里实际是变量的地址)放到抽屉B(指针变量的内存单元)中锁起来,如果需要打开A抽屉,首先要找到B抽屉的钥匙(指针变量),打开B抽屉,取出A钥匙。再打开A抽屉,取出A抽屉中之物。

说到这里直接访问和间接访问的概念就比较清晰了,下面我们引入指针和指针变量的概念:
一个变量的地址称为该变量的“指针”。
如果有一个变量专门用来存放另一变量的地址(即指针),则称它为“指针变量”。上面提到的i_pointer就是一个指针变量,指针变量就是一种地址变量,用来存放地址,指针变量的值是地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值