二级指针*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);的输出值一样。