| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 619 人关注过本帖
标题:[求助]为什么会这样啊?菜鸟请教
只看楼主 加入收藏
小李8023
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-4-22
收藏
 问题点数:0 回复次数:6 
[求助]为什么会这样啊?菜鸟请教
#define LOW 0
#define HIGH 5
#define CHANGE 2
int i=LOW;
main()
{
  int i=HIGH;
  reset(i/2);
  printf("i=%d\n",i);
  reset(i=i/2);
  printf("i=%d\n",i);
  i=reset(i/2);
  printf("i=%d\n",i);
  workover(i);
  printf("i=%d\n",i);
}
workover(i)
int i;
{
  i=(i%i)*((i*i)/(2*i)+4);
  printf("i=%d\n",i);
  return(i);
}
reset(i)
int i;
{
  i=i<=CHANGE?HIGH:LOW;
  return(i);
}
为什么这个程序输出的第二个i是2而不是5???
搜索更多相关主题的帖子: return 
2005-05-12 12:16
lwei
Rank: 5Rank: 5
等 级:职业侠客
威 望:3
帖 子:197
专家分:369
注 册:2005-5-4
收藏
得分:0 
第二个输出前你做了i=i/2的运算, 因此, i=2.

你在两个涵数中对i的运算, 并没有改变main中i的内容,因此只到你执行i=reset(i/2)的时候, main中的i才会变化

在有,不要这样写程序, 以后你会看糊涂的

2005-05-12 15:04
小李8023
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-4-22
收藏
得分:0 
为什么这句reset(i=i/2);不是把2送到函数reset()处理之后再返回回5回来啊???


这里还是想不懂
2005-05-12 23:11
musicml
Rank: 1
等 级:新手上路
帖 子:273
专家分:0
注 册:2005-4-2
收藏
得分:0 

首先我要说的的是: 哎~~~~ 你的程序风格真是糟透了! 不过看来你也是个新手, 也无可厚非 我帮你的程序整理了一下 看看 #include <stdio.h>

#define LOW 0 #define HIGH 5 #define CHANGE 2

int i=LOW;//注意这是全局变量

int reset(int); int workover(int);

void main() {

int i=HIGH; reset(i/2); printf("i=%d\n",i); reset(i=i/2); printf("i=%d\n",i); i=reset(i/2); printf("i=%d\n",i); workover(i); printf("i=%d\n",i); }

int reset(int i)//这是reset函数的形参 { i=i<=CHANGE?HIGH:LOW; return(i); }

int workover(int i)//这是workover的形参 { i=(i%i)*((i*i)/(2*i)+4); printf("i=%d\n",i); return(i); } 先看看我着重标出的三个参数, 它们三个的不同 我也注释在旁边 在main()函数中,当第二次执行reset(i=i/2)时,要注意 此时 i 是全局变量,它在做为实参传递之前,先做了一次运算,即i=5/2; 所以 全局变量i 的值现在变成2。而reset(int i),可知这是传值调用,虽然它的形参也是 i ,但是这个i 和全局的 i 是没有任何联系的,所以,在reset(int i)中,执行的操作,根本不会影响到全局变量i 的值。 所以全局变量i=2.


Every thing is possible.
2005-05-13 00:12
Srin
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2005-5-11
收藏
得分:0 
55555555555555555555555........................................ 偶们C都要学完了,,,可是偶还是看不懂你们的程序,,,,,,,,,,,,,主要是将函数的时候偶没有去听课啊,,,,,,,,,,,,,,,,,, 55555555555555...........................
2005-05-13 05:07
风趣哥哥
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2005-4-21
收藏
得分:0 
你先做了除啦,当然是五拉
2005-05-13 13:38
lwei
Rank: 5Rank: 5
等 级:职业侠客
威 望:3
帖 子:197
专家分:369
注 册:2005-5-4
收藏
得分:0 
以下是引用musicml在2005-5-13 0:12:24的发言:

首先我要说的的是: 哎~~~~ 你的程序风格真是糟透了! 不过看来你也是个新手, 也无可厚非 我帮你的程序整理了一下 看看 #include <stdio.h>

#define LOW 0 #define HIGH 5 #define CHANGE 2

int i=LOW;//注意这是全局变量

int reset(int); int workover(int);

void main() {

int i=HIGH; reset(i/2); printf("i=%d\n",i); reset(i=i/2); printf("i=%d\n",i); i=reset(i/2); printf("i=%d\n",i); workover(i); printf("i=%d\n",i); }

int reset(int i)//这是reset函数的形参 { i=i<=CHANGE?HIGH:LOW; return(i); }

int workover(int i)//这是workover的形参 { i=(i%i)*((i*i)/(2*i)+4); printf("i=%d\n",i); return(i); } 先看看我着重标出的三个参数, 它们三个的不同 我也注释在旁边 在main()函数中,当第二次执行reset(i=i/2)时,要注意 此时 i 是全局变量,它在做为实参传递之前,先做了一次运算,即i=5/2; 所以 全局变量i 的值现在变成2。而reset(int i),可知这是传值调用,虽然它的形参也是 i ,但是这个i 和全局的 i 是没有任何联系的,所以,在reset(int i)中,执行的操作,根本不会影响到全局变量i 的值。 所以全局变量i=2.

注意, main中的i是局部变量, 不是全局变量


2005-05-13 16:26
快速回复:[求助]为什么会这样啊?菜鸟请教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015805 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved