指针参数和内存

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




猜你喜欢

转载自blog.csdn.net/hb_2016/article/details/80021744