关于简单的C语言程序问题
2个回答
展开全部
输出的结果和你预想的不一样是因为你没有理解关于参数传递的一些问题
参数的传递有两种方式
:1
。按值传递(你的程序用的都是这种方式),传递的只是当前值的一个副本(拷贝的),所有在函数中,副本的改变时不会影响原来的那个变量的(你的程序是变量
i
)
2。按引用传递,即按地址传递,这种参数传递在函数内部改变了变量的值将影响传递进去的那个变量
----------------------------------------------
int
i=HIGH; //
i
=
5
reset(i/2); //
把i传给函数reset,这时候传递的是i的一个副本,一个拷贝而已,在函数可能就变成了tmp_i
,对该值的改变时不影响外部变量i的
printf("i=%d\n",i);
//所以这里输出
5
reset(i=i/2); //
这个可以写成这样
i
=
i/2
,i
值改变了
等于2
,然后把2传给函数,和上面一样
最后
printf("i=%d\n",i);
//
这里输出时
i
=
2
reset(i/2);
//同上,一样的原来
下面将输出2
printf("i=%d\n",i);
workover(i); // 在函数WORKOVER内部的那个PRINTF输出
0
printf("i=%d\n",i);
//同上i
=
2
================================
第一次样给人解释,记得加分哈
参数的传递有两种方式
:1
。按值传递(你的程序用的都是这种方式),传递的只是当前值的一个副本(拷贝的),所有在函数中,副本的改变时不会影响原来的那个变量的(你的程序是变量
i
)
2。按引用传递,即按地址传递,这种参数传递在函数内部改变了变量的值将影响传递进去的那个变量
----------------------------------------------
int
i=HIGH; //
i
=
5
reset(i/2); //
把i传给函数reset,这时候传递的是i的一个副本,一个拷贝而已,在函数可能就变成了tmp_i
,对该值的改变时不影响外部变量i的
printf("i=%d\n",i);
//所以这里输出
5
reset(i=i/2); //
这个可以写成这样
i
=
i/2
,i
值改变了
等于2
,然后把2传给函数,和上面一样
最后
printf("i=%d\n",i);
//
这里输出时
i
=
2
reset(i/2);
//同上,一样的原来
下面将输出2
printf("i=%d\n",i);
workover(i); // 在函数WORKOVER内部的那个PRINTF输出
0
printf("i=%d\n",i);
//同上i
=
2
================================
第一次样给人解释,记得加分哈
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int
i=HIGH;//i=5
reset(i/2);//这里传的是值不是地址所以函数对i做的任何修改在主函数没有效果所以i=5
printf("i=%d\n",i);
reset(i=i/2);//i=i/2
i是整数
所以i=2;同样reset函数不能影响主函数里面i的值所以i=2
printf("i=%d\n",i);
reset(i/2);//同第一个一样i的值不变reset不能影响i
=2;
printf("i=%d\n",i);
workover(i);//同样他也不能改i的值
所以下面的i=2;这函数里面有个打印语句(i%i)恒等于0的
所以不管传什么进去
打印出来的值都是0
printf("i=%d\n",i);//i=2;
i=HIGH;//i=5
reset(i/2);//这里传的是值不是地址所以函数对i做的任何修改在主函数没有效果所以i=5
printf("i=%d\n",i);
reset(i=i/2);//i=i/2
i是整数
所以i=2;同样reset函数不能影响主函数里面i的值所以i=2
printf("i=%d\n",i);
reset(i/2);//同第一个一样i的值不变reset不能影响i
=2;
printf("i=%d\n",i);
workover(i);//同样他也不能改i的值
所以下面的i=2;这函数里面有个打印语句(i%i)恒等于0的
所以不管传什么进去
打印出来的值都是0
printf("i=%d\n",i);//i=2;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询