C 声明指针指向指针指向指针
我试图通过澄清指针指向的地址、指针本身的地址以及地址所指的值来更好地理解简单指针。所以我写了一小段代码:C 声明指针指向指针指向指针,c,pointers,C,Pointers,我试图通过澄清指针指向的地址、指针本身的地址以及地址所指的值来更好地理解简单指针。所以我写了一小段代码: #include <stdio.h> #include <stdlib.h> int main() { int a; int *p; int **pp; a = 42; /* Take the address of a */ p = &a; /* Take the address of p */
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
int *p;
int **pp;
a = 42;
/* Take the address of a */
p = &a;
/* Take the address of p */
pp = &p;
printf("Address of int &a: %p\n\n", &a);
printf("value of a: %d\n\n", a);
printf("Address where *p points to via (void *)p: %p\n\n", (void *)p);
printf("Value that *p points to via *p: %d\n\n", *p);
printf("Address of *p itself via (void *)&p: %p\n\n", (void *)&p);
printf("Address where **p points to via (void *)pp: %p\n\n", (void *)pp);
printf("Value that **pp points to via **pp: %d\n\n", **pp);
printf("Address of **p itself via (void *)&pp: %p\n\n", (void *)&pp);
return EXIT_SUCCESS;
}
但这给了我一个不兼容的指针警告。有人能给我解释一下为什么这不起作用,以及对printf()
的调用是否正确吗?问题在于:
int **ppp;
那应该是
int ***ppp;
因为现在是你试图强迫一个三重指针变成一个双指针。这可能会在这一行中给您一个错误:
ppp = &pp;
另外您可能想看看第2个:)
p.s.
如果您提供行号和具体错误,以供将来参考。人们可能想帮助你更好、更多:)问题在于:
int **ppp;
那应该是
int ***ppp;
因为现在是你试图强迫一个三重指针变成一个双指针。这可能会在这一行中给您一个错误:
ppp = &pp;
另外您可能想看看第2个:)
p.s.
如果您提供行号和具体错误,以供将来参考。人们可能想帮助你更好、更多:)错误在这一行
国际**ppp;/*它应该是***ppp,因为您指向的指针指向另一个*/错误在这一行
国际**ppp;/*它应该是***ppp,因为您指向的指针指向另一个*/您得到的确切警告是什么,它在哪一行?
int**ppp代码>应该是int***ppp代码>。此外,(void**)*ppp
不正确。它应该是(void*)*ppp
.Da**It。我应该留作将来参考还是删除这个问题?术语:“地址*X指向”应该是“地址X指向”。指针指向该位置<代码>*X
指定位置,而不是address@brauner投票以“输入错误”结束你得到的确切警告是什么,它在哪一行?int**ppp代码>应该是int***ppp代码>。此外,(void**)*ppp
不正确。它应该是(void*)*ppp
.Da**It。我应该留作将来参考还是删除这个问题?术语:“地址*X指向”应该是“地址X指向”。指针指向该位置<代码>*X
指定位置,而不是address@brauner投票以“打字错误”结束