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投票以“打字错误”结束