非常基本的问题

Zia*_*man 3 c c++

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

void f(int *); 
Run Code Online (Sandbox Code Playgroud)


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

void f(int ***); 
Run Code Online (Sandbox Code Playgroud)

void f(int **=0)
Run Code Online (Sandbox Code Playgroud)

Bli*_*ndy 15

void f(int ***); 
Run Code Online (Sandbox Code Playgroud)

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

int x=42;
int *px=&x;
int **ppx=&px;
int ***pppx=&ppx;
f(pppx);
Run Code Online (Sandbox Code Playgroud)

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

int x=42;
int *px=&x;
int **ppx=&px;
f(ppx);  // pt to pt to x
f();     // same as f(0)
Run Code Online (Sandbox Code Playgroud)

更新:

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

bool alloc(T **mem, int count);
Run Code Online (Sandbox Code Playgroud)

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

T *mem;
verify(alloc(&mem, 100));
Run Code Online (Sandbox Code Playgroud)

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

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


FRo*_*owe 5

int *** 
Run Code Online (Sandbox Code Playgroud)

指向指向int的指针的指针.把它想象成(((int*)*)*).

void f(int **=0)
Run Code Online (Sandbox Code Playgroud)

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