本人菜鸟 ,以前总有这样这种观念,凡是指针作为参数传入函数,函数执行完毕之后,指针肯定变了,因为直接对地址进行操作吗,不知道为什么会有这样的想当然的想法。看了
GFree_Wind 在
算法实现:返回单链表的倒数第n个节点 的一个评论之后,我才恍然大悟。指针传入函数的时候,它本身也是作为一个变量传入的,根据函数的原理,会再创建一个临时变量作为传入变量的副本,而函数在执行时真正操作的是这个副本,这样的话实际上在函数执行过后指针本身是不变的。那到底是什么东西变了呢,真正变了的东西是这个指针指向的数据. 下面是一个例子
- #include <iostream>
- using namespace std;
- int func1(int* p);
- int main()
- {
-
- int a = 1;
- int *p = &a;
-
- cout << "before : the address is " << p << " a = " << a << endl;
-
- func1(p);
-
- cout << "after : the address is " << p << " a = " << a << endl;
-
- system("pause");
-
- return 0;
- }
- int func1(int *p)
- {
- (*p)++;
- p++;
- }
执行结果如下:
before : the address is 0x22ff74 a = 1
after : the address is 0x22ff74 a = 2
由结果可知:指针本身并没有变,变得是指针指向的内容
看来以前对指针的本质了解的不够啊,其实指针本身也就是一个变量,只不过它的值是地址罢了,了解了这一点就不会犯类似的错误了...看来看一些大牛的东西还是非常有用的,哈哈哈哈
阅读(4237) | 评论(7) | 转发(2) |