【问题标题】: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 级之后)编译器可以说“好吧,够了,游戏结束!”。