c++指针:
编译器总是要为函数的每个参数制作临时副本,指针参数p的副本是 _p,编译器使 _p = p。所以对函数中对指针的操作得有个返回值,然后用原来的指针接收。在参数传递过程中,p和_p的值是一样的,但是&p和&_p是不一样的。
p本身保存的是一个地址,*p是取得p保存地址中的值,而&p是指针p指针自己本身的地址。
void swap_1(char *p)
{
char x = '1';
p = &x;
}
这个改变的是在函数体内参数的副本,改变了副本的指向。也就是把p指针本身的内容也改成x的地址。所以*p,也就是取出了x地址中所指向的内容。对于swap_3也就是给main中的p变量 重新赋值
void swap_2(char *p)
{
char x='3';
*p=x;
}
这个是_p和p指向同一个地址,但是_p和p本身的地址是不同的。这个时候_p通过*p=x'把其所指向的内容改变了,所以在main函数中的p的指向内容也跟着改变了,所以可以通过传递指针来改变参数的内容。
char* swap_3(char *p)
{char x = '2';
p = &x;
return p;
}
void main()
{char temp = 'f';
char *p = &temp;
swap_1(p);
cout << *p << endl;
swap_2(p);
cout<<*P<<endl;
swap_3(p);cout << *p << endl;
p=swap_3(p); //表示指向的内容有所改变cout << *p << endl;
}
输出结果为:f 3 3 2
注意的是&_p &p这2个指针所在的地址是不一样的,但是p和_p所指向的内容是一致的。
内存管理参考:https://blog.csdn.net/ZLK961543260/article/details/77971236