今天又遇到了那个指针作函数参数的经典问题。
今天室友小彪同学,模拟线性表,然后用了类似下面的代码:


void test(int *tp, int n);
void creatIt(int *tp, int n);
int main()
{
    int *p = nullptr;
    test(p, 5);
    creatIt(p, 5);
}



void test(int *tp, int n)
{
    tp = new int[n];
}

void creatIt(int *tp, int n)
{
    for(int i=0;i<n;i++)
    {
         tp[i] = i; 
    }
}

然后报错了
原因就是,函数是通过拷贝实参的值给形参赋值,这里虽然是传递的指针,但是并不能改变指针的值。就像初学时的swap函数一样,只是在函数的内部进行了一些列与实参本身无关的事,最终 p 还是一个空值。

要么用二级指针来改变一级指针的值,要么就用指针引用来改变传递过来的实参的值。

如下:


void test(int **tp, int n);
void creatIt(int *tp, int n);
int main()
{
    int *p = nullptr;
    test(&p, 5);
    creatIt(p, 5);
}



void test(int **tp, int n)
{
    *tp = new int[n];
}

void creatIt(int *tp, int n)
{
    for(int i=0;i<n;i++)
    {
         tp[i] = i; 
    }
}
最后修改:2019 年 03 月 02 日
如果觉得我的文章对你有用,请随意赞赏