您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言指针是什么?

时间:12-30来源:作者:点击数:

指针,想说弄懂你不容易啊!我们许多初学指针的人都要这样感慨。我常常在思索它,为什么呢?其实生活中处处都有指针,我们也处处在使用它。有了它我们的生活才更加方便了。没有指针,那生活才不方便。不信?你看下面的例子。

这是一个生活中的例子:比如说你要我借给你一本书,我到了你宿舍,但是你人不在宿舍,于是我把书放在你的2层3号的书架上,并写了一张纸条放在你的桌上。纸条上写着:你要的书在第2层3号的书架上。当你回来时,看到这张纸条,你就知道了我借与你的书放在哪了。你想想看,这张纸条的作用,纸条本身不是书,它上面也没有放着书。那么你又如何知道书的位置呢?因为纸条上写着书的位置嘛!其实这张纸条就是一个指针了。它上面的内容不是书本身,而是书的地址,你通过纸条这个指针找到了我借给你的这本书。

那么我们C/C++中的指针又是什么呢?请继续跟我来吧,下面看一条声明一个指向整型变量的指针的语句:
   int *pi;

pi是一个指针,当然我们知道啦,但是这样说,你就以为pi一定是个多么特别的东西了。其实,它也只过是一个变量而已。与上一篇中说的变量并没有实质的区别。不信你看下面图:

说明:这里我假设了指针只占2个字节宽度,实际上在32位系统中,指针的宽度是4个字节宽的,即32位。)由图示中可以看出,我们使用“int *pi”声明指针变量—— 其实是在内存的某处声明一个一定宽度的内存空间,并把它命名为pi。你能在图中看出pi与前面的i、a 变量有什么本质区别吗?没有,当然没有!pi也只不过是一个变量而已嘛!那么它又为什么会被称为“指针”?关键是我们要让这个变量所存储的内容是什么。现在我要让pi成为具有真正“指针”意义的变量。请接着看下面语句:
   pi = &i;

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

你看,执行完pi=&i后,在图示中的内存中,pi的值是6。这个6就是i变量的地址编号,这样pi就指向了变量i了。你看,pi与那张纸条有什么区别?pi不就是那张纸条嘛!上面写着i的地址,而i就是那个本书。你现在看懂了吗?因此,我们就把pi称为指针。所以你要记住,指针变量所存的内容就是内存的地址编号!好了,现在我们就可以通过这个指针pi来访问到i这个变量了,不是吗?看下面语句:
   printf("%d", *pi);

那么*pi什么意思呢?你只要这样读它:pi的内容所指的地址的内容(嘻嘻,看上去好像在绕口令了),就是pi这张“纸条”上所写的位置上的那本 “书”—— i 。你看,Pi的内容是6,也就是说pi指向内存编号为6的地址。*pi嘛,就是它所指地址的内容,即地址编号6上的内容了,当然就是30这个“值”了。所以这条语句会在屏幕上显示30。也就是说printf("%d", *pi)等价于printf("%d", i) ,请结合上图好好体会吧!各位还有什么疑问?

到此为止,你掌握了类似&i、*pi写法的含义和相关操作吗?总的一句话,我们的纸条就是我们的指针,同样我们的pi也就是我们的纸条!剩下的就是我们如何应用这张纸条了。最后我给你一道题:程序如下。
   char a,*pa;
   a = 10;
   pa = &a;
   *pa = 20;
   printf("%d", a);

你能直接看出输出的结果是什么吗?如果你能,我想本篇的目的就达到了。好了,就说到这了。Happy Study! 在下篇中我将谈谈“指针的指针”即对
   int **ppa;

中ppa的理解。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门