将指针的地址作为参数传递

Passing the address of a pointer as a parameter

将指针的地址作为参数传递有什么意义?例如:

int *ptr_one;
ptr_one = (int *)malloc(sizeof(int));

然后函数被调用如下:

func(&ptr_one);

注意函数参数如下:

func(int **ptr)
{
......
}

将指针传递给指针的目的是为了修改指针变量。

回想一下,在 C 风格的编码中,可以通过将地址或指针传递给参数来修改参数。如果参数是需要修改的int,则传递指向该整数的指针。同样,如果一个指针参数将被函数修改,它是通过指向指针(或指针地址)的指针传递的。

如果您希望修改指针本身,则需要通过引用或指针地址传递它。例如,

func(int **ptr)
{
    free(ptr);

    ptr = new int[2]; //side note: use new instead of malloc in C++
                      //memory allocated with new is deallocated with
                      //delete
}

在 C 中,传递指针的地址是您可以在函数中分配或释放该指针的内存的唯一方法。然而,在 C++ 中,通常最好改为通过引用传递。所以你的代码的 C++ 版本看起来像:

int *ptr = new int;
func(ptr);
delete ptr;

void func(int *&ptr) {
.
.
.
}