彻底搞定C指针2--指针是什么东西

彻底搞定C指针2

姚云飞

1       指针是什么东西

“指针,你真是像雨像云又像雾,想要读懂你真不容易。”其实在我们现实的生活中指针无所不在,我们也处处在使用它。有了它,我们的生活才变得更加方便了,不信?让你瞧瞧!

现实生活中的指针

假如我要还给你一本书,当我到了你的宿舍,发现你不在。于是我把书放在你书架的2层第3个隔架的位置上,并留下一条纸条在你的桌上。纸条上写着:我还你的书在书架的第2层第3个隔架上。当你回来时,看到这张纸条,你就知道我还你的书放在哪了。

现在你想想看,例子中这张纸条的意义。纸条本身并不是书,它上面也没有放着书。可是你是如何知道书的位置呢?不就是因为纸条上写着那本书的位置嘛!在这里,这张纸条其实就是我们现实生活中一个指针了。它上面的内容不是书本身,而是书的地址,你通过纸条这个“指针”找到了我还给你的书了。

C指针与一般变量没什么不同

那么我们CC++中的指针又是什么呢?看下面看一个申明一整型指针变量的语句如下:

int * pi;

pi是一个指针,我们当然知道的。但你不要以为pi一定是个多么极为特别的东西了,其实,它也只过是一个变量而已。与上一篇中说的变量并没有实质的区别。不信请你看图2-1所示的pi。(注:这里我假设了指针只占2个字节宽度,实际上在32位系统中,指针的宽度是4个字节宽的,即32位。)

内存地址→   6     7       8     9    10    11     12    13     14

     ··· |     30      |  ‘t’  |      |      |      |      |      |      |...

 变量     |i        |a |             | pi      |

2-1

由图中可以看出,我们使用int* pi所申明的指针pi其实就是内存某处一定宽度的空间,这个空间被命名为pi。你能在图2-1中看出pi与前面的ia的变量有什么本质区别吗?显然,没有,没什么本质的区别!pi也不过像ia等一样的变量而已嘛!可是我们为什么要称之为指针?关键是我们要把这个变量所存储的内容看成是什么。

C指针与纸条

现在我要让pi成为真正有意义上的指针。请接着看下面语句:

pi=&i;

你应该知道 &i是什么意思吧!再次提醒你啦:这是返回i变量的地址编号。整句的意思就是把i地址的编号赋值给pi,也就是你在pi上写上i的地址编号。结果如图2-2所示:

内存地址→      6     7       8     9    10    11   12    13   14

     ··· |     30      |  ‘t’  |      |      |     6       |      |      |...

 变量             |      |a|          | pi   |

2-2

执行完pi=&i;后,在图2-2所示的情况下,pi的值是6。这个6就是i变量的地址编号,这样pi就指向了变量i了。

你看,pi与那张纸条有什么区别?pi不就像是那张纸条吗?我们在它上面写上i的地址,而i就相当于那个本书了。pi的内容是i变量的地址,换句话说,pi指向i变量,因此我们就把pi称为“指针”了。

接下来,我们就可以通过这个指针pi来访问到i这个变量了,不是吗?看下面语句:

printf(“%d”,*pi);

这个“*pi”什么意思呢?你可以这样读它:返回pi所指地址的内容,也就是pi这张“纸条”上所写的位置上的那本 “书”——i的内容了,也即30。所以这条语句会在屏幕上显示30,也就是说*pi就是i

到此为止,我们应该知道&i , *pi的含义了。总的说来,我们的纸条就是我们的指针,pi其实也只不过是我们的纸条!剩下的就是我们如何应用这张纸条了的事了。

最后我给你一道题:程序如下。

char  a,*pa;

a=10;

pa=&a;

*pa=20;

printf( “%d”, a);

你能直接看出输出的结果是什么吗?如果能,我的目的就达到了。Happy to Study

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值