对c语言指针的理解

谁借莪1个温暖的怀抱¢ 2022-08-06 06:28 319阅读 0赞

对于下面这一段常见的代码:

  1. #include<stdio.h>
  2. void swap(int u, int v)
  3. {
  4. int temp;
  5. temp = u;
  6. u = v;
  7. v = temp;
  8. }
  9. int main()
  10. {
  11. int x = 2, y = 3;
  12. printf("Originally x = %d and y = %d.\n", x, y);
  13. swap(x, y); //zhi
  14. printf("Now x = %d and y = %d.\n", x, y);
  15. return 0;
  16. }

swap函数并不能满足我们的要求:交换x和y的值。

当我们执行上面的代码时,在内存的栈(stack)上就开始变化了。main主函数所占空间,以及属于main函数的局部变量x和y的内存空间被开辟。在调用swap函数时,swap函数所占内存空间也在stack上被开辟,它的两个变量u、v接收从main函数中传过来的值,保存在相应的内存空间。见下图比较形象一点:

Center

现在就很容易理解为什么swap函数不能交换main函数中x和y的值了,swap和main函数在stack中的运行空间就像中间隔着栅栏一样,属于两块不同的”领土”。swap运行完后,释放它的内存,和main没有一点的交互。swap不管用,因为它不能介入main的内存中,所以该让指针(pointer)上场了,让swap有能力去操纵main中的x、y。

下面用指针l来达到我们想要的效果:

  1. #include<stdio.h>
  2. void swap(int * u, int * v) //这里的u、v表示期望得到的是一个int型的地址
  3. {
  4. int temp;
  5. temp = *u;
  6. *u = *v;
  7. *v = temp;
  8. }
  9. int main()
  10. {
  11. int x = 2, y = 3;
  12. printf("Originally x = %d and y = %d.\n", x, y);
  13. swap(&x, &y); //这里通过&传递x和y的地址,告诉swap x 、y在哪里
  14. printf("Now x = %d and y = %d.\n", x, y);
  15. return 0;
  16. }

所谓地址,就好比如说你高考完去上大学时,只需要知道大学的地址,你就可以顺利地到达学校。知道了地址后,就可以到那个地址去做我们想做的事情。swap中的u、v保存了main中x和y的地址,这样当swap在操作u、v时,其实就是在操作main中的x、y。swap(&x, &y);看到&这个符号,就表示这是个地址,这里指出x、y在内存的哪个地方,传给swap后,swap也知道x、y在内存的哪个地方了,swap就可以使用在那个内存中的数据。很高兴吧,swap和main开始通信了,因为我们有通讯地址。来看内存的变化:

Center 1

*u,u是一个地址,×在前就表示定位到u那个地址(go to u),在swap中就可以修改不属于它的内存。

最后总结一下:通过指针可以让两块不相干的内存作用域发生联系;想得到一个变量的地址,就在变量名前加&;*是定位符,如上面的*u和*v(u和v是地址),就是找到这些地址,然后定位到那里去。

更多详情请看:http://v.163.com/movie/2010/3/Q/J/M6U6LS8CV_M6U6O02QJ.html

PS:想想咱们国家的计算机教育,我也是醉了。

发表评论

表情:
评论列表 (有 0 条评论,319人围观)

还没有评论,来说两句吧...

相关阅读

    相关 深入理解C语言指针

    一、指针的概念 要知道指针的概念,要先了解变量在内存中如何存储的。在存储时,内存被分为一块一块的。每一块都有一个特有的编号。而这个编号可以暂时理解为指针,就像酒店的门牌号一样

    相关 理解c语言指针

    1. 通俗来说就是通过c语言指针间接改变变量的值 2. 举个列子:我们想通过函数add()实现变量a+1,不使用指针的代码如下: include <stdio.h

    相关 深入理解C语言指针奥秘

    指针的概念   指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指

    相关 理解C语言指针

    C语言指针理解 本人在初学的时候认为c语言中指针很好理解,但身边好多同学一直在说老师讲的指针太抽象了,看不到,摸不着,非常难理解,甚至学了4年计算机,毕业了,不少同学还说

    相关 C++指针理解

    指针对象指向某一处地址,如果你希望赋值以后初始的更改了指针对象的值也发生更改的话就用指针吧。对于指针的初始化下面说的这两种方式的结果是不同的,`c=&a`和`c=a` ,在

    相关 深入理解C语言 - 指针详解

    一、什么是指针 C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址。CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行