C语言中指向指针的指针怎么理解

Python026

C语言中指向指针的指针怎么理解,第1张

指针可以理解为一个存地址的寄存器,存的就是地址,“指向指针的指针” 就是二级指针

假设另一个指针是int *q而q的指针就是 &q,

p = &q;

作用为了获取这个地址。

先纠正你的错误:

你的输出中,“p1的值是3”应该改成“p1指向的变量的值是3”也就是“a是3”;

“p1地址是012FF718”应该改成“p1值是012FF718”

然后回答问题:

p1=p;这一句,p1的值和p一样,并不是p1指向p;p1和p都指向a了。

可能帮助你理解的其他话:

p1是个变量,其类型是指向整形的指针,你赋值给他是a的地址012FF718

p1和最开始的p一样,指向a

也就是说,a变量的地址是012FF718

而p1的值就是012FF718,后续你没有更改p1的值,所以p1的值一直是012FF718,一直指向变量a

指针其实也是个变量(只要是变量就一定有相应的内存空间) 只是这个变量比较的特殊

它只能存放别的变量的地址 变量时在内存中是有地址的

你要明确两概念:变量值和变量地址

变量值:是变量本身的内容

变量地址:是该变量在内存中的位置编号

通俗来讲就是说这个变量fp只能接受一个指针变量的地址所以你看第8行在p前面加了一个’&‘取地址符号 也就是说把p这个变量的地址给了fp了fp的内容就是p的地址

1.接下来9行输出了a的值这个直接通过变量名a就能找到该变量的地址并且直接输出了a的值1

2.第10行你会发现输出列表参数里面是*p是什么意思?其中的“*”在这里表示指针运算符, 就是说以p的内容为地址找到该地址里面的值   p里面不是村的a变量的地址吗不是吗?  你看第7行是不是在a变量前面加了“&”取地址运算符了 所以*p就是1

3.第11行**fp  这里出现了2个‘*’号 别急 由于指针运算符的结合方向为“自右至左”所以*fp先运算那么*fp是什么就是一fp的内容为地址找到的变量的值是什么 fp里面存放着p的地址  显然此时*fp最终变成了p这个变量的地址了

4.*(p变量的地址) 到了这一步就是说以p的内容为地址找到对应的变量了 显然是a这个变量了

第11就是你说的指向指针的指针了。