繁体   English   中英

非常基本的问题

[英]very basic c question

因为我们在函数的参数列表中使用指针

void f(int *); 


这意味着此函数将接收指向整数的指针
但是这意味着什么

void f(int ***); 

void f(int **=0)
void f(int ***); 

表示该函数接收指向指向int的指针的指针。 这适用于它:

int x=42;
int *px=&x;
int **ppx=&px;
int ***pppx=&ppx;
f(pppx);

现在关于第二个,它是一个接收指向int的指针的函数,如果你什么都不给它,它默认为0。

int x=42;
int *px=&x;
int **ppx=&px;
f(ppx);  // pt to pt to x
f();     // same as f(0)

更新:

这种双指针的实际应用是内存分配例程,如:

bool alloc(T **mem, int count);

此函数返回true / false具体取决于它是否有效,并将使用实际内存地址更新传入的指针,如下所示:

T *mem;
verify(alloc(&mem, 100));

传入一个未初始化的指针,该函数可以用实际值覆盖它,因为你传递了一个指向实际指针的指针。 最后, mem包含一个指向有效内存的指针。

另一个应用程序,更常见但很少启发,是一个数组(所谓的锯齿状数组)。

int *** 

指向指向int的指针的指针 可以把它想象为(((int*)*)*)

void f(int **=0)

此函数将指向int指针的指针作为参数,但也可以在没有参数的情况下调用,在这种情况下参数将为0。

void f(int ***); 

这里f采用指向指向int指针的指针。

void f(int **=0)

此函数将指向int指针作为参数,但此参数是可选的,默认值为0(即null)

void f(int ***);

这里的函数参数是一个指向指向int的指针的指针(或者更可能指向其中的许多指针)。

void f(int **=0)  

这里它只是一个指向int的指针,如果在调用函数时没有指定参数(可选参数),则初始化为0的指针(指向...的指针为0,而不是int)。

您要问的是多重间接 那页很好地总结了这个问题,我强烈建议在指针上阅读整个页面,这是很好的。

void f(int ***); 

正如其他答案所解释的那样,这是一个指向指向int的指针的指针。 它告诉我程序员不是一个非常优秀的程序员 - 他(并且几乎可以肯定是他)正忙于炫耀他有多聪明,有3级间接考虑难以保持像这样的过于模糊的代码。 在C和C ++编程的大约20年中,我从未使用过3级间接,很少使用2级。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM