1.C++指针作形参,会有不少陷阱,不少时候也许并不如咱们想的那样。好比咱们想经过一个函数改变指针的值:ios
#include<</SPAN>iostream> using namespace std; void test_point(int *p) { int a=2; p=&a; //关键点 } int main() { int x=1; int *p1=&x; test_point(p1); cout<<*p1<<endl; return 0; }
这段代码明显想经过函数改变p1的值,可是结果却没有变化,输出仍旧是1。问题就出在关键点那里!函数
二、再看一个代码:spa
#include<</SPAN>iostream> using namespace std; void test_point(int *p) { int a=2; *p=a; //关键地方,体会与上一段代码的不一样 } int main() { int x=1; int *p1=&x; test_point(p1); cout<<*p1<<endl; return 0; }
这段代码却可以改变输出值。区别就在*p=a与p=&a之间。指针
3.《C++ primer(第四版)》105页能够发现其中的解释:code
对p=&a,称之为给指针赋值,意思是给指针自己一个指向的对象。对象
而对*p=a称之为经过指针进行赋值,意思是改变指针所指对象的值。blog
解释以下:对于p=&a,就是把函数形参指针p指向a(给指针赋值,赋上a的地址便可指向a),临时变量a在函数调用完以后就不复存在,实参p1io
也不会被改变,*p1=4;而*p=a就是经过指针进行赋值,也就是说*p是指指针p指向的值,给*p赋值a,就是给*p所指向的值赋值,指针传参传给形参p的是x的地址,也就是说在函数中*p其实表示给x赋值,这样即便局部变量a消失了,可是x的值早已经过指针真正改变了。class