对c语言指针的理解
来源:互联网 发布:装修报价软件 编辑:程序博客网 时间:2024/05/17 06:33
对于下面这一段常见的代码:
#include<stdio.h>void swap(int u, int v){ int temp; temp = u; u = v; v = temp; }int main(){ int x = 2, y = 3; printf("Originally x = %d and y = %d.\n", x, y); swap(x, y); //zhi printf("Now x = %d and y = %d.\n", x, y); return 0;}swap函数并不能满足我们的要求:交换x和y的值。
当我们执行上面的代码时,在内存的栈(stack)上就开始变化了。main主函数所占空间,以及属于main函数的局部变量x和y的内存空间被开辟。在调用swap函数时,swap函数所占内存空间也在stack上被开辟,它的两个变量u、v接收从main函数中传过来的值,保存在相应的内存空间。见下图比较形象一点:
现在就很容易理解为什么swap函数不能交换main函数中x和y的值了,swap和main函数在stack中的运行空间就像中间隔着栅栏一样,属于两块不同的”领土”。swap运行完后,释放它的内存,和main没有一点的交互。swap不管用,因为它不能介入main的内存中,所以该让指针(pointer)上场了,让swap有能力去操纵main中的x、y。
下面用指针l来达到我们想要的效果:
#include<stdio.h>void swap(int * u, int * v) //这里的u、v表示期望得到的是一个int型的地址{ int temp; temp = *u; *u = *v; *v = temp;}int main(){ int x = 2, y = 3; printf("Originally x = %d and y = %d.\n", x, y); swap(&x, &y); //这里通过&传递x和y的地址,告诉swap x 、y在哪里 printf("Now x = %d and y = %d.\n", x, y); return 0;}
所谓地址,就好比如说你高考完去上大学时,只需要知道大学的地址,你就可以顺利地到达学校。知道了地址后,就可以到那个地址去做我们想做的事情。swap中的u、v保存了main中x和y的地址,这样当swap在操作u、v时,其实就是在操作main中的x、y。swap(&x, &y);看到&这个符号,就表示这是个地址,这里指出x、y在内存的哪个地方,传给swap后,swap也知道x、y在内存的哪个地方了,swap就可以使用在那个内存中的数据。很高兴吧,swap和main开始通信了,因为我们有通讯地址。来看内存的变化:
*u,u是一个地址,×在前就表示定位到u那个地址(go to u),在swap中就可以修改不属于它的内存。
最后总结一下:通过指针可以让两块不相干的内存作用域发生联系;想得到一个变量的地址,就在变量名前加&;*是定位符,如上面的*u和*v(u和v是地址),就是找到这些地址,然后定位到那里去。
更多详情请看:http://v.163.com/movie/2010/3/Q/J/M6U6LS8CV_M6U6O02QJ.html
PS:想想咱们国家的计算机教育,我也是醉了。
- 浅谈对C语言指针的理解
- C语言--对指针的理解
- 对c语言指针的理解
- 个人对c语言指针的理解
- 再论C语言指针—对指针的理解
- 对C语言数据处理和指针的理解(二)
- 对C语言数据处理和指针的理解
- c语言,通过代码对指针的理解
- 理解c语言的指针
- c语言指针的理解
- 2---C语言|笔记【对C语言指针的初步理解】
- 对C的指针的理解
- 我对c指针的理解
- C/C++中的对指针的理解
- 对C指针的深入理解
- 对c指针的理解解析
- 理解C语言指针
- 对c语言中常见指针的一些理解(一)
- Linux下C语言连接MySQL找不到mysql.h解决办法
- 【简单粗暴】建立Java的Log4j 日志打印工具
- Android SDK Manager 下载SDK失败的解决办法
- 【学习ios之路:Objective-C】类与对象
- 遗传算法
- 对c语言指针的理解
- ios扩展机制objc_setAssociatedObject,objc_getAssociatedObject
- Eclipse调试:改变颜色, 背景与字体大小 和xml字体调整
- 系统的制作和飞机大战的完善
- FlashDevelop在非默认浏览器中运行flash
- LINQPad
- avplayer 分析
- 快排三种实现
- wps文件批量转换到 microsoft office平台 软件