指针传值易注意点

来源:互联网 发布:冒险岛源码 编辑:程序博客网 时间:2024/06/06 07:31
struct _ClassA {    int x;    int y;}ClassA, PCLassAFun(ClassA *p){    ClassA a;    a.x = 1;     a.y = 2;    p = &a; }// 调用Fun后,会发现p指针还是指向NULLClassA *p = NULL;Fun(p);

p指针还是指向NULL,原因如下:
传进函数Fun的参数p其实是p的一个副本p0,都指向NULL
这里写图片描述
所以 p = &a; 只是把a变量的地址赋给了p0,也就是p0指向了a的内存空间,这样当函数Fun执行完后,P当然还是指向NULL,没有被赋值
这里写图片描述
修改方法:
直接给p分配一款内存,这样p0其实也指向p的那块内存。
这里写图片描述
所以修改p0的值,也就是修给p的值

Fun(ClassA *p){    p.x = 1;     p.y = 2;}ClassA *p = new ClassA();Fun(p);