Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1774469
  • 博文数量: 198
  • 博客积分: 4088
  • 博客等级: 上校
  • 技术积分: 2391
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-15 16:29
个人简介

游戏开发,系统架构; 博客迁移到:http://www.jianshu.com/u/3ac0504b3b8c

文章分类

全部博文(198)

文章存档

2017年(1)

2016年(12)

2015年(1)

2014年(3)

2013年(13)

2012年(18)

2011年(150)

分类: C/C++

2011-10-26 16:48:29

  本人菜鸟 ,以前总有这样这种观念,凡是指针作为参数传入函数,函数执行完毕之后,指针肯定变了,因为直接对地址进行操作吗,不知道为什么会有这样的想当然的想法。看了GFree_Wind算法实现:返回单链表的倒数第n个节点 的一个评论之后,我才恍然大悟。指针传入函数的时候,它本身也是作为一个变量传入的,根据函数的原理,会再创建一个临时变量作为传入变量的副本,而函数在执行时真正操作的是这个副本,这样的话实际上在函数执行过后指针本身是不变的。那到底是什么东西变了呢,真正变了的东西是这个指针指向的数据. 下面是一个例子
 
  1. #include <iostream>
  2. using namespace std;

  3. int func1(int* p);
  4. int main()
  5. {
  6.      
  7.      int a = 1;
  8.      int *p = &a;
  9.      
  10.      cout << "before : the address is " << p << " a = " << a << endl;
  11.      
  12.      func1(p);
  13.      
  14.      cout << "after : the address is " << p << " a = " << a << endl;
  15.      
  16.      system("pause");
  17.      
  18.      return 0;
  19. }

  20. int func1(int *p)
  21. {
  22.      (*p)++;
  23.      p++;
  24. }

执行结果如下:

before : the address is 0x22ff74 a = 1
after  : the address is 0x22ff74 a = 2

由结果可知:指针本身并没有变,变得是指针指向的内容

看来以前对指针的本质了解的不够啊,其实指针本身也就是一个变量,只不过它的值是地址罢了,了解了这一点就不会犯类似的错误了...看来看一些大牛的东西还是非常有用的,哈哈哈哈

阅读(4231) | 评论(7) | 转发(2) |
给主人留下些什么吧!~~

haoran_2022011-10-31 18:05:48

指针的“神秘”就这么简单,呵呵,

haoran_2022011-10-31 18:05:38

指针的“神秘”就这么简单,呵呵,

yandaren_12202011-10-27 13:22:19

wayling: 这点很多人讨论过了,所以C语言只有call by value.....
很多初学者总觉得指针很神秘,我之前也一样,但是了解到指针本身也是一个变量之后,一切问题都迎刃而解,唯一特殊的就是可以利用指针对其所指向的内容进行操作

wayling2011-10-27 13:03:07

这点很多人讨论过了,所以C语言只有call by value