C语言菜鸟,求问。

懒睡的猫 2012-01-06 06:42:51
#include<stdio.h>
int a=3,b=5;
int main()
{
int max(int a,int b);
int a=8;
printf("max=%d\n",max(a,b));
return 0;
}
int max(int a,int b)
{
int c;
c=a>b?a:b;
return(c);
}

为什么max=8而不是5的啊??
...全文
153 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
老鼠期待爱 2012-01-07
  • 打赏
  • 举报
回复
当局部变量和全局变量重名时,局部变量将覆盖全局的
阿标 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cfjtaishan 的回复:]
这是全局变量和局部变量同名时,编译器的处理规则。如果在函数中或者一个语句块中,定义了一个和全局变量同名的变量,那么该变量的值会屏蔽全局变量的值。
想测试也不是很难,你在max函数中加入一句:printf("%d\n", a);看一下是8还是3。其他的就迎刃而解了:就是求两个数中较大数。
[/Quote]..
ProgrammingRing 2012-01-06
  • 打赏
  • 举报
回复
10L和4L说的都不错
public_lcc 2012-01-06
  • 打赏
  • 举报
回复
在输出时你重新执行了函数max,又比较了一回,这时候,8>5,肯定返回并输出8啊。。。
yahua 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 flydreamcy 的回复:]

举个简单的例子,咱们中国有句古话“强龙不压地头蛇”,int a=3是全局变量,但在main函数里,有一个int a=8,在整个程序中,int a=3是强龙,而int a=8是地头蛇,是main函数这个地头上的地头蛇,所以在main函数中最牛的就是int a=8,所以调用max函数的时候传的参数是int a=8,int b=5,在max函数里,
c=a>b?a:b,由a=8,b=5可知,c=8,……
[/Quote]
这个够形象的
yanyujie0706 2012-01-06
  • 打赏
  • 举报
回复
一般在编程序时,没有什么特别的需求不会有定义两个相同的变量的!
跟着心跳走 2012-01-06
  • 打赏
  • 举报
回复
举个简单的例子,咱们中国有句古话“强龙不压地头蛇”,int a=3是全局变量,但在main函数里,有一个int a=8,在整个程序中,int a=3是强龙,而int a=8是地头蛇,是main函数这个地头上的地头蛇,所以在main函数中最牛的就是int a=8,所以调用max函数的时候传的参数是int a=8,int b=5,在max函数里,
c=a>b?a:b,由a=8,b=5可知,c=8,所以返回的是 8 ,而不是 5
AnYidan 2012-01-06
  • 打赏
  • 举报
回复
int a=8;//a是局部变量,把全局变量a屏蔽了

++
burner 2012-01-06
  • 打赏
  • 举报
回复
我也是,学过,又忘了。
danwell7 2012-01-06
  • 打赏
  • 举报
回复
三目运算符,没什么
wangxiaoshuai_wb 2012-01-06
  • 打赏
  • 举报
回复
楼上正解,局部变量屏蔽全局.
gfzeng 2012-01-06
  • 打赏
  • 举报
回复
#include "iostream"
using namespace std;
int a=3,b=5;//a,b是全局变量
int main()
{
int max(int a,int b);
int a=8;//a是局部变量,把全局变量a屏蔽了
printf("max=%d\n",max(a,b));//这里,a=8,b=5,然后调用函数是值传递
return 0;
}
int max(int a,int b)//这里的a,b是形参,接受的是值传递的值8和5
{
int c;
c=a>b?a:b;
return(c);
}

编译时, 没提示吗? 应该会有提示的, 如果连个a声明不同, 编译失败。 相同就提示。 具体也看编译器。
黯然 2012-01-06
  • 打赏
  • 举报
回复

#include "iostream"
using namespace std;
int a=3,b=5;//a,b是全局变量
int main()
{
int max(int a,int b);
int a=8;//a是局部变量,把全局变量a屏蔽了
printf("max=%d\n",max(a,b));//这里,a=8,b=5,然后调用函数是值传递
return 0;
}
int max(int a,int b)//这里的a,b是形参,接受的是值传递的值8和5
{
int c;
c=a>b?a:b;
return(c);
}
自信男孩 2012-01-06
  • 打赏
  • 举报
回复
这是全局变量和局部变量同名时,编译器的处理规则。如果在函数中或者一个语句块中,定义了一个和全局变量同名的变量,那么该变量的值会屏蔽全局变量的值。
想测试也不是很难,你在max函数中加入一句:printf("%d\n", a);看一下是8还是3。其他的就迎刃而解了:就是求两个数中较大数。
lqllq 2012-01-06
  • 打赏
  • 举报
回复
? : 是一个表达式
?之前是判断语句
为真时执行?和:之间的
为假时执行:之后的。
lqllq 2012-01-06
  • 打赏
  • 举报
回复
c=a>b?a:b等价于
if(a>b)
c=a;
else
c=b;

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧