问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言 问题 解释下。。运行结果怎么是8,17 8理解 17就纳闷了 自己算是15

发布网友 发布时间:2023-05-06 22:50

我来回答

6个回答

热心网友 时间:2023-11-23 18:22

原因是函数func()中的变量m,和i是静态变量
(当函数执行一次后,静态变量会保存运行结果,当下次调用时,将会沿用上次的运行结果。)
也就是说,执行一次func()后,m=8,i=3;这样就使得第二次运行的结果为17。
静态变量的生存周期是整个源程序,即,当你关闭整个程序,重新打开运行时,变量会回到初始值;否则会保存运行的结果。
不知道我是否讲明白。

热心网友 时间:2023-11-23 18:22

第一个func是
m = 0, i = 2;
i = 2 + 0 + 1 = 3;
m = 3 + 4 + 1 = 8
第二次func是
m = 8, i = 3;
i = 3 + 8+ 1 = 12
m = 12+ 4 + 1 = 17

热心网友 时间:2023-11-23 18:23

1, 第一次调用 func: i = i + m + 1; 代入数就是 i = 2 + 0 + 1即3;
m = i + a + b;代入数就是m = 3 + 4 + 1 即8,所以第一次打印8;
1, 第二次调用 func: i = i + m + 1; 代入数就是 i = 3 + 8 + 1即12;
m = i + a + b;代入数就是m = 12 + 4 + 1 即17

热心网友 时间:2023-11-23 18:24

static如果你了解了你就明白了,

第一次进入func(),m未被初始化,所以初始化m,i,m=0,i=2
运行后i=3,m=8,
第二次进入func(),m已经被初始化,所以不再初始化m,i,m,i的值不变m=8,i=3
运行后i=12,m=17,

该变量在全局数据区分配内存;   
未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化);   
静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;

热心网友 时间:2023-11-23 18:24

#include<stdio.h>
void main()
{
int func(int a,int b);
int k=4,m=1,p;

p=func(k,m);
printf("%d,",p); // p是8

p=func(k,m);
printf("%d\n",p); //p是17
}
int func(int a,int b)
{
static int m=0,i=2;
i=i+m+1; //第一次i是3 第二次i是12 第一次返回m
m=i+a+b; //第一次m是8 第二次m是17 第二次返回m
return m;
}

热心网友 时间:2023-11-23 18:25

m=0 i=2
i=2+0+1 =3
m=3+4+1=8
p=8
i=3+8+1=12
m=12+4+1=17
p=17
注意m和i 是static,第一次初始化以后,值就一直保留的

热心网友 时间:2023-11-23 18:22

原因是函数func()中的变量m,和i是静态变量
(当函数执行一次后,静态变量会保存运行结果,当下次调用时,将会沿用上次的运行结果。)
也就是说,执行一次func()后,m=8,i=3;这样就使得第二次运行的结果为17。
静态变量的生存周期是整个源程序,即,当你关闭整个程序,重新打开运行时,变量会回到初始值;否则会保存运行的结果。
不知道我是否讲明白。

热心网友 时间:2023-11-23 18:23

第一个func是
m = 0, i = 2;
i = 2 + 0 + 1 = 3;
m = 3 + 4 + 1 = 8
第二次func是
m = 8, i = 3;
i = 3 + 8+ 1 = 12
m = 12+ 4 + 1 = 17

热心网友 时间:2023-11-23 18:23

1, 第一次调用 func: i = i + m + 1; 代入数就是 i = 2 + 0 + 1即3;
m = i + a + b;代入数就是m = 3 + 4 + 1 即8,所以第一次打印8;
1, 第二次调用 func: i = i + m + 1; 代入数就是 i = 3 + 8 + 1即12;
m = i + a + b;代入数就是m = 12 + 4 + 1 即17

热心网友 时间:2023-11-23 18:24

static如果你了解了你就明白了,

第一次进入func(),m未被初始化,所以初始化m,i,m=0,i=2
运行后i=3,m=8,
第二次进入func(),m已经被初始化,所以不再初始化m,i,m,i的值不变m=8,i=3
运行后i=12,m=17,

该变量在全局数据区分配内存;   
未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化);   
静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;

热心网友 时间:2023-11-23 18:24

#include<stdio.h>
void main()
{
int func(int a,int b);
int k=4,m=1,p;

p=func(k,m);
printf("%d,",p); // p是8

p=func(k,m);
printf("%d\n",p); //p是17
}
int func(int a,int b)
{
static int m=0,i=2;
i=i+m+1; //第一次i是3 第二次i是12 第一次返回m
m=i+a+b; //第一次m是8 第二次m是17 第二次返回m
return m;
}

热心网友 时间:2023-11-23 18:25

m=0 i=2
i=2+0+1 =3
m=3+4+1=8
p=8
i=3+8+1=12
m=12+4+1=17
p=17
注意m和i 是static,第一次初始化以后,值就一直保留的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
罗马全面战争怎么样提高元老院评价? 半夜家中镜匾忽然碎了 镜子忽然碎掉怎么解 化能异养型微生物分类 如何判断自养微生物与异养微生物 如何得知某微生物是否为哪种氨基酸的异养型微生物。 滨州市北海振宇电子科技有限责任公司怎么样? 北京振宇科技有限公司怎么样? 上海振宇化工科技有限公司经营范围 商业医保是否值得购买? 一道c语言题,希望大神能帮我讲解一下17和18空。 c语言 这一题为什么是17而不是17.5 求解这题C语言17是怎么算的? 以下C语言程序,输出为什么是17? c语言题,为什么x的值是17,不是17.500000? c语言问题 这里数组为什么是17? 这是什么植物,用来扎粽子的? 舐犊的诗句舐犊的诗句是什么 小型洗衣机不装皮带都不转怎么回事 仓颉拆码疑问 ? 衣服尺码逢到外面是什么意思 淘宝衣服码怎么拆 拆码垛是什么意思 拆片衣服的码数怎么看 何谓拆码? 尝鼋的网络解释尝鼋的网络解释是什么 鼋鼍的解释鼋鼍的解释是什么 广东2022年一级建造师报考条件及专业要求是什么 第五人格oppo账号如何找回第五人格oppo账号怎么找回 2021年山东一级建造师报考条件-学历条件-工作年限条件? c语言 a[17][17]={0,1}什么意思 学校新学期教学工作思路 机场净空区的作用是 机场净空的介绍 两个机场合划净空区什么意思 拿评 什么叫机场净空? 机场什么是指正机起飞着陆所涉及的范围 无情锁定是什么意思 她说你已经被我锁定了,这啥意思啊 瑞虎8plus轮胎是什么品牌? 村鲁的拼音狐村鲁的拼音是什么 粗野的拼音狐 粗野的拼音是什么 _粗的拼音狐 _粗的拼音是什么 粗俗的拼音狐 粗俗的拼音是什么 麻绳的引证解释麻绳的引证解释是什么 我的世界有限地图怎么没了 denoise是什么意思 效益比例是什么意思啊? 效益比例是什么意思呢? 劳动最光荣绘画怎么画