问题描述
- 求解C程序里第二个printf的结果为何是3,7,7呢?
-
int k=7;
void f(int **s)
{
int t=&k;
*s=t;
_printf("%d,%d,%d,",k,*t,*s);_
}
main()
{
int i=3,*p=&i,**r=&p;
f(r);
printf("%d,%d,%dn",i,*p,**r);
}
/*
VC++程序运行结果为:
7,7,7,3,7,7
*/
求解C程序里第二个printf的结果为何是3,7,7呢?如果f(r)把r的地址改变了,p的地址也跟着变吗?那i的地址不是也跟着p也改变了吗?结果应该是7,7,7啊?求大侠帮忙解答
解决方案
这个问题和你提的另一个问题,突破点都一样,我已经回答了。把 “变量”“ 指针” “指针的指针”这三个概念理解透了,这类问题你就不会再困扰了。
他们最终牵涉到两个概念“地址” “值”
比如一条无限长的走廊上有无限多个房间,我们每个房间给一个唯一门牌号 1、 2 、3、 5 ……
这个编号就是每一个房间的“地址”,房间里面放的物品就是它的“值”
变量:就相当于一个房间, 它有一个编号,而且里面放物品。
指针:相当于两个房间,一个房间里面存放的是另一个房间门牌号,我们需要通过房间里面的门牌号才能找到存放物品的房间取得物品。
指针的指针:相当于3个房间,第一个房间里放着第二个房间的门牌号,第二个房间里放着第三个房间的门牌号,第三个房间里存放的才是物品,
我们必须通过前面两个房间才能找到存放物品的那个房间取得物品。
解决方案二:
变量的地址是不会变的,f(r)之后是p的值变了,就是p不指向i了,但是i的值还没变。
解决方案三:
k是变量7.
s指向k的地址。
i是变量
p指向i的地址
r指向p的地址
星r是i的地址
f把r改为k的地址
没有改变i
时间: 2024-10-03 23:15:56