为了账号安全,请及时绑定邮箱和手机立即绑定

用于多级指针解引用?

用于多级指针解引用?

C++
MM们 2019-09-02 20:30:59
什么时候使用任何语言的指针要求有人使用多个指针,让我们说一个三指针。什么时候使用三指针而不是只使用常规指针是有意义的?例如:char  * * *ptr;代替char *ptr;
查看完整描述

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);


查看完整回答
反对 回复 2019-09-02
?
茅侃侃

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"));


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 455 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信