因为我们在函数的参数列表中使用指针,例如
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
包含指向有效内存的指针。
另一个更常见但缺乏启发性的应用是数组的数组(所谓的交错数组)。
关于c++ - 非常基本的c问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2078567/