3 回答
TA贡献1833条经验 获得超4个赞
每个星应该被读作“指针指向”所以
char *foo;
是“指针foo指向的字符”。然而
char *** foo;
是“指向指向指针foo的指针指向的字符”。因此foo是一个指针。在该地址是第二个指针。在指向的地址是第三个指针。取消引用第三个指针会产生一个char。如果这就是它的全部内容,很难为此做出很多贡献。
不过,它仍然可以完成一些有用的工作。想象一下,我们正在编写bash或其他一些过程控制程序的替代品。我们希望以面向对象的方式管理流程的调用...
struct invocation {
char* command; // command to invoke the subprocess
char* path; // path to executable
char** env; // environment variables passed to the subprocess
...
}
但是我们想要做一些奇特的事情。我们想要一种方法来浏览每个子进程看到的所有不同的环境变量集。为此,我们env将调用实例中的每组成员收集到一个数组中env_list,并将其传递给处理该数组的函数:
void browse_env(size_t envc, char*** env_list);
TA贡献1842条经验 获得超21个赞
指针只是一个保存内存地址的变量。
因此,当您想要保存指针变量的地址时,可以使用指向指针的指针。
如果要返回指针,并且已经在使用返回变量,则会传入指针的地址。然后该函数取消引用此指针,以便它可以设置指针值。即该函数的参数将是指向指针的指针。
多级间接也用于多维数组。如果要返回二维数组,可以使用三重指针。当将它们用于多维数组时,尽管在遍历每个间接层时都要小心地进行强制转换。
以下是通过参数返回指针值的示例:
//Not a very useful example, but shows what I mean...
bool getOffsetBy3Pointer(const char *pInput, char **pOutput)
{
*pOutput = pInput + 3;
return true;
}
你这样称呼这个函数:
const char *p = "hi you";
char *pYou;
bool bSuccess = getOffsetBy3Pointer(p, &pYou);
assert(!stricmp(pYou, "you"));
- 3 回答
- 0 关注
- 455 浏览
添加回答
举报