C++中指针引用参数问题

App函数中参数使用指针引用参数的情况(运行正常)

img

App函数中参数去掉&的情况(运行不正常)

img


为什么会出现这个问题呢?
不太明白App函数中使用指针引用参数和不使用引用参数的区别。不使用指针引用参数时,主函数传给App的不是一个指针吗,对pa进行赋值不就是给ary进行赋值吗?

因为你在子函数中new了一个指针,这个new的指针和你传的main中的指针不一样,所以你如果不用 & 将新指针内容返回,它是不能返回到main中的:

void wrongptrvalue(int *array,int num)
{
    array=new int[num];
    cout<<"array ptr :"<<array<<endl;
    for(int id=0;id!=num;id++)
    {
        *(array+id)=id+3;
        cout<<"in wrongptrvalue:"<<*(array+id)<<" ";
    }
    cout<<endl;
}

int main()
{
    const int num=3;
    int *arrayreal=(int*)malloc(num*sizeof(int));
    memset(arrayreal,0,num*sizeof(int));

    cout<<"real array ptr :"<<arrayreal<<endl;

    changeptrvalue(arrayreal,num);
    for(int id=0;id!=num;id++)
    {
        cout<<*(arrayreal+id)<<" ";
    }
    cout<<endl;

    wrongptrvalue(arrayreal,num);
    cout<<"after  wrongptrvalue :"<<arrayreal<<endl;
    for(int id=0;id!=num;id++)
    {
        cout<<*(arrayreal+id)<<" ";
    }
    cout<<endl;

    return 0;
}

img


除非你在子函数中不要new,像changeptrvalue中一样直接使用main中的这个指针即可。

因为你是要给指针赋值,所以要传指针的指针或者指针的引用

在main函数调用App的时候,需要将ary的引用传入,即App(&ary,n);

&表示引用
当使用&时,修改形参将会改变实参的值
不加&时,形参修改不会影响实参
而你的函数又没有将新的地址通过return返回给外面的指针
那么相当于外面是个野指针,并没有指向函数里指针的地址