C语言 程序输出
#include<stdio.h>voidchange(inta,int*b){*b=a;a=1;b=&a;printf("\nInfunctionchange:a=%d...
#include <stdio.h>
void change (int a,int *b)
{
*b=a;
a=1;
b=&a;
printf("\n In function change : a=%d, *b=%d", a,*b);
}
main()
{
int s=2,t=3;
printf("\n In function main : s=%d,t=%d",s,t);
change(s,&t);
printf("\n In function main :s=%d,t=%d",s,t);
return 0;
}
为什么输出的最后一行是 s=2,t=2 不是等于1…… 展开
void change (int a,int *b)
{
*b=a;
a=1;
b=&a;
printf("\n In function change : a=%d, *b=%d", a,*b);
}
main()
{
int s=2,t=3;
printf("\n In function main : s=%d,t=%d",s,t);
change(s,&t);
printf("\n In function main :s=%d,t=%d",s,t);
return 0;
}
为什么输出的最后一行是 s=2,t=2 不是等于1…… 展开
2个回答
展开全部
这个是高伍参数传递类的问题,当时学的也不是很郑轿好...
不过呢,这里是这样的原因:
首先 &t,是将t的地址给了 *b,那么b此时代表了t的喊念肆地址,第一句*b=a,这个就相当于对t的地址的引用之后赋值a,也就是说 相当于 t=a....在这里输出一下*b,你会发现值是2;
那么b=&a,之后为毛 t不变呢??
因为这里你相当于把 b这个指针变量赋值为a的地址,注意这就是说此时b已经不能再指向t了,指向的是a了,所以在哪个change函数里面输出 *b = 1;
也就是说你要明白 指针变量只是一个指针,你把谁的地址给它它就指向谁....
所以呢,最后t = 2咯...
不过呢,这里是这样的原因:
首先 &t,是将t的地址给了 *b,那么b此时代表了t的喊念肆地址,第一句*b=a,这个就相当于对t的地址的引用之后赋值a,也就是说 相当于 t=a....在这里输出一下*b,你会发现值是2;
那么b=&a,之后为毛 t不变呢??
因为这里你相当于把 b这个指针变量赋值为a的地址,注意这就是说此时b已经不能再指向t了,指向的是a了,所以在哪个change函数里面输出 *b = 1;
也就是说你要明白 指针变量只是一个指针,你把谁的地址给它它就指向谁....
所以呢,最后t = 2咯...
展开全部
首先a是值传递所以s肯定不会变,s的结果是2.
其次*b改变的是t的纯尘值改变成2,但是后来b=&a改变的是指针b的地址而不是t的地址所以纯磨对t无影响。所以t仍做裤斗是2
其次*b改变的是t的纯尘值改变成2,但是后来b=&a改变的是指针b的地址而不是t的地址所以纯磨对t无影响。所以t仍做裤斗是2
追问
“首先a是值传递所以a肯定不会变,a的结果是2.”
还是没懂为什么s=2.。。a=1了s为什么不等于1.。。。
追答
a是值传递,a拿到的只是s值的一个拷贝(相当于把我的数据给你复制一份,但是我的数据还在,现在你修改了你的那份数据,肯定对我这份没影响)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询