用于多级指针解引用?

什么时候使用任何语言的指针要求有人使用多个指针,让我们说一个三指针。什么时候使用三指针而不是只使用常规指针是有意义的?


例如:


char  * * *ptr;

代替


char *ptr;


MM们
浏览 456回答 3
3回答

潇潇雨雨

每个星应该被读作“指针指向”所以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);

茅侃侃

指针只是一个保存内存地址的变量。因此,当您想要保存指针变量的地址时,可以使用指向指针的指针。如果要返回指针,并且已经在使用返回变量,则会传入指针的地址。然后该函数取消引用此指针,以便它可以设置指针值。即该函数的参数将是指向指针的指针。多级间接也用于多维数组。如果要返回二维数组,可以使用三重指针。当将它们用于多维数组时,尽管在遍历每个间接层时都要小心地进行强制转换。以下是通过参数返回指针值的示例://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"));
打开App,查看更多内容
随时随地看视频慕课网APP