传递指针地址作为参数
传递指针地址作为参数的意义何在?例如:传递指针地址作为参数
int *ptr_one;
ptr_one = (int *)malloc(sizeof(int));
然后函数被调用为以下:
func(&ptr_one);
注意该函数的参数是如下:
func(int **ptr)
{
......
}
如果你想修改指针本身,那么你需要通过引用或指针地址来传递它。例如,
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) {
.
.
.
}
我的指针指向一个条目列表,每次我调用它时,函数都会不断修改指针的头部。我想这就是你自己修改指针的意思。对 ? – Anas 2015-02-12 00:42:28
@Anas:是的。如果你只传入'head',那么指针在调用代码中就不会改变,只是在函数中。 – wolfPack88 2015-02-12 00:44:26
指针传递到指针的目的是这样的,指针变量可以被修改。
回想一下,从C风格的编码,可以通过传递参数的地址或指针来修改参数。如果该参数是一个需要修改的int,则传递一个指向该整数的指针。同样,如果函数将修改指针参数,它将通过指向指针(或指针地址)的指针传递。
对于许多示例之一,当您传递{anything}的地址时,该函数可能会修改调用者的{anything}。这种做法(和你的代码)比C++更C。 – 2015-02-12 00:24:11
一个典型的例子是当你添加一个元素到一个列表中时,你需要传递它的'head'(指针)并且能够修改它。使用单个指针是一个非常常见的错误,会产生很多令人头疼的问题。但是要走的路是C++引用,即通过引用传递指针,如'func(int *&ptr)' – vsoftco 2015-02-12 00:31:43
在现代C++中,我们很少需要指针,所以传递它们(无论如何)很难开始用。 – MSalters 2015-02-12 11:30:37