| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 727 人关注过本帖
标题:看程序出结果求助
只看楼主 加入收藏
szh519579098
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-4-13
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:9 
看程序出结果求助
#include<stdio.h>
int x=1;
func(int x)
{
x=3;
}
main()
{
func(x);
printf("%d\n",x);
}
这个结果不是3嘛  怎么为1了?


#include<stdio.h>
func(int a,int b)
{
static int m=0,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
void main()
{
int k=4,m=1,p;
p=func(k,m);
printf("%d",p);
p=func(k,m);
printf("%d",p);
}
这个结果怎么为817啊 真心不懂
搜索更多相关主题的帖子: return 
2013-04-19 11:27
Han_FlyB
Rank: 6Rank: 6
等 级:侠之大者
帖 子:143
专家分:424
注 册:2013-3-25
收藏
得分:3 
第一个问题你应该看一下全局变量与局部变量;
X=3你只在func里有效,也没有返回值,所以没有改变X的值

[ 本帖最后由 Han_FlyB 于 2013-4-19 11:44 编辑 ]
2013-04-19 11:41
子楠
Rank: 3Rank: 3
来 自:武汉
等 级:论坛游侠
帖 子:111
专家分:164
注 册:2013-4-9
收藏
得分:3 
以下是引用Han_FlyB在2013-4-19 11:41:04的发言:

第一个问题你应该看一下全局变量与局部变量;
X=3你只在func里有效,也没有返回值,所以没有改变X的值

三楼正解,建议你好好看看书
2013-04-19 12:27
子楠
Rank: 3Rank: 3
来 自:武汉
等 级:论坛游侠
帖 子:111
专家分:164
注 册:2013-4-9
收藏
得分:0 
int k=4,m=1,p;
p=func(k,m);      第一次调用func函数输出p=8,在func()函数中m=8,i=3;
printf("%d",p);
p=func(k,m);       执行func函数时就相当于按m=8,i=3计算了,故输出p为17;
printf("%d",p);
     i和m为static(静态变量)具有记忆功能,把第一次调用func函数中的i和m记住了。
2013-04-19 12:43
czzdcn123
Rank: 7Rank: 7Rank: 7
来 自:江西
等 级:黑侠
威 望:3
帖 子:258
专家分:510
注 册:2013-3-7
收藏
得分:3 
2楼  4楼正解
2013-04-19 12:47
chenzhibin07
Rank: 2
等 级:论坛游民
帖 子:57
专家分:64
注 册:2013-4-10
收藏
得分:3 
第1个问题:当全局变量和局部变量同名时,在局部变量的作用域内访问的是局部变量,此时全局变量被屏蔽。反之,局部变量被屏蔽!!!
2013-04-19 16:11
liu122430950
Rank: 4
等 级:业余侠客
威 望:1
帖 子:45
专家分:211
注 册:2010-5-30
收藏
得分:3 
第一个 x是全局变量 设存在内存0x4100ff7c中
之后定义了一个函数,函数的参数为x也可以当成y,左大括号为y分配内存空间其地址不是0x4100ff7c,当成y之后为y赋值为3,
之后函数执行到右大括号内存空间被回收。y=3也消失了,换句话说地址0x4100ff7c对应的内容未被更改
所以x是1.

因为m,n被设计为静态变量,其存储地址不在栈中,换句话说其地址不会在此函数体执行完后一块消失。
而是在main()的}后才被回收。
2013-04-19 16:59
逆风而前
Rank: 7Rank: 7Rank: 7
来 自:福建
等 级:黑侠
威 望:7
帖 子:193
专家分:567
注 册:2013-2-14
收藏
得分:3 
如果形参为指针就可以改变它的值了。
2013-04-21 22:37
木容木水
Rank: 2
等 级:论坛游民
帖 子:44
专家分:25
注 册:2013-2-24
收藏
得分:3 
用指针吧
2013-04-21 23:05
tremere
Rank: 6Rank: 6
来 自:火星
等 级:侠之大者
帖 子:223
专家分:432
注 册:2013-3-11
收藏
得分:3 
#include<stdio.h>
int x=1;
func(int x)
{
x=3;
}
你这个函数没有返回值呀,那你定义x=1
你要输出x,它就是1而已。
#include<stdio.h>
func(int a,int b)
{
static int m=0,i=2;//红体标出来的,它是静态变量
i+=m+1;
m=i+a+b;
return(m);
}
void main()
{
int k=4,m=1,p;
p=func(k,m);
printf("%d",p);
p=func(k,m);
printf("%d",p);
}第一次传入函数的是4,1
做完一次之后i=i+m+1算得i=3了
m=i+a+b=8
第二回i=3+1+1=5了。
m=5+4+8=17


极品菜鸟,来学习啦,啦啦啦啦啦啦啦。。。
2013-04-22 09:32
快速回复:看程序出结果求助
数据加载中...
 
   



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

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