【问题标题】:How to double deref in C?如何在C中加倍deref?
【发布时间】:2019-07-25 22:09:07
【问题描述】:

尝试双重取消引用并打印它们(前两个是示例):

printf ("a's value     = %d \n", a) ;

printf ("a's address   = %p \n", &a) ;


printf ("a_ptr_ptr deref'ed defer'ed =d% \n",

对于 a_ptr_ptr deref'ed defer'ed,在 \n" 之后会发生什么

【问题讨论】:

    标签: c pointers dereference


    【解决方案1】:

    如果您想要a 的地址,您将不得不将a 的地址存储在一个指针变量中,并获取该地址。但是这样做之后,是的,您可以使用** 对该指针进行双重取消引用,并取回a 的值。像这样的:

    int a = 5;
    int *ip = &a;
    int **ipp = &ip;
    
    printf("ipp = %p\n", ipp);
    printf("*ipp = %p, ip = %p, &a = %p\n", *ipp, ip, &a);
    printf("**ipp = %d, *ip = %d\n", **ipp, *ip);
    

    理论上你可以继续这个,只要你喜欢:

    int ***ippp = &ipp;
    int ****ipppp = &ippp;
    int *****ippppp = &ipppp;
    printf("*****ippppp = %d\n", *****ippppp);
    

    但现在这主要是一个游戏; 5 级指针在真正的 C 程序中没有实际用途,并且在某些时候(我认为在 8 或 10 级之后)编译器可以说“好吧,够了,游戏结束!”。

    【讨论】:

      猜你喜欢
      • 2021-03-25
      • 1970-01-01
      • 2020-11-10
      • 2020-12-29
      • 2020-11-22
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      相关资源
      最近更新 更多