c++ - 非常基本的c问题

标签 c++ c

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

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/

相关文章:

c - 如何触发 Splint 的抽象类型检查器?

c - 分割字符串

c - 寻找GCD的汇编语言程序—— float 异常

c - Ruby 的 Thread#join(0) 的功能?

c++ - RGBA 像素数据放入 D3DLOCKED_RECT

C 编程错误 : Reading from a . txt 文件

c++ - 理解#includes C++

c++ - Visual Studio 2010 上的 GStreamer C++?

c++ - 我是否应该将永远不会更改的参数声明为 const 变量?

c++ - 时间复杂度困惑