关于一级指针和二级指针的问题,我被绕晕了。求教!

二级指针*q我知道指向的是一级指针的存储地址即i的地址,那**q为什么是i的值5呢?求解!**q到底什么意思?我是新手,帮帮忙,我自学的有问题没人问,说明白点,谢谢!

# include <stdio.h>

int main(void)
{
int i = 5;
printf ("%d\n",&i);
int* p = &i;
int** q = &p;
printf ("%d\n",*q);
printf ("%d\n",**q);

return 0;
}

    我给你讲讲基本概念吧,“&“是取地址运算符,”*“是取指针值运算符。

    我觉得你之所以混是因为”*“有2个意思,1是定义时表明这是定义了1个指针,2是运算过程中出现的”*“表示的是取值运算符,取指针的值,就好比=既可以是赋值号,又可以是等于号(==),在C语言中同一个符号有多重含义很正常,要学好基本功

    *p = &i;指针p指向变量i,指针p的值就是变量i的地址

    **q = &p;2级指针(指向指针的指针)q指向指针p,2级指针q的值就是指针p的地址

    printf ("%d\n",*q);这里的*q是取值算符,计算的是指针q的值,就是变量i的地址

    printf ("%d\n",**q);这里如果是*q是取一次地址,得到的是一级指针p的值,而2个”*”对一级指针p再次取值,就是一级指针p指向的变量i的值。

    你可以再试试printf ("%d\n",*q);这是取2级指针指向的指针p的值

    换句话说就跟printf ("%d\n",*q);和printf ("%d\n",&i);的输出值一样。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-03-29
# include <stdio.h>
int main(void)
{
int i = 5;
printf ("%d\n",&i); // 输出指向i的地址值
int* p = &i; //p指向i的地址
int** q = &p; //q指向p的地址,即指向i地址的地址
printf ("%d\n",*q); //输出 i地址的地址
printf ("%d\n",**q);         //取出指向i地址的地址指向的值,即5
getchar();
return 0;
}

相似回答