c语言,这个运行结果是多少,怎么来的?

如题所述

因为变量c是静态局部变量,所以其生存期与程序相同,每次调用后其值将长期保留(不会被内存释放),其初始值是当程序运行时第一次赋的值,以后调用不再赋初始值(再次进入f函数时,第二句赋值语句不执行),

因此,第一次调用f函数时c为5(a=c++是先赋值后自增),第二次调用f函数时c为6,又因为逗号运算符的优先级低于赋值运算符,所以变量a被赋值为变量c(而不是变量b),并被返回给k,因此第一次调用f后k为5,第二次调用f后k为6,

程序打印的是第二次调用f后k的结果,所以输出6.

温馨提示:内容为网友见解,仅供参考
第1个回答  2021-04-28

这是个有趣的问题, 程序代码本身很多混淆,冗余。

这里容易造成困惑的关键点在于 逗号表达式和 赋值运算符 谁的优先级高。

即:a= c++,b++;   如果理解为 a=c++;  b++; 还是理解为 a =(c++,b++);

逗号表达式优先级最低,这里应理解为 a=c++;  b++;

函数 f 的 参数多余, b多余,简化后,函数等效下图:

第2个回答  2021-04-27
f()里面a的值被赋于c的值,为5,与原来进来是多少没有关系,f()的返回值只与里面的c有关,总是返回5。
第3个回答  2021-04-28
6
main里面,调用f函数两次,
第一次,f函数里面的c初始化为5,a=c++,会导致c自增为6
第二次,f函数里的c由于是静态变量,所以不执行初始化语句,a=c++, a的值是6,c自增为7,最后返回a,
返回结果回到main函数赋值给k,k的结果就是6
第4个回答  2021-04-28
k的输出值是 6
for 循环会执行两次,第一次调用 f(a=4) 第二次调用 f(a=5).
第一次调用时,f(a=4) 返回值a是c执行++之前的结果,返回5,c++后变成6.
第二次调用时,f(a=5)此时c已经是6了。同样返回值a是c执行++之前的结果,返回6.
返回值6被赋值给k,因此输出 k = 6.

c语言,这个运行结果是多少,怎么来的?
因为变量c是静态局部变量,所以其生存期与程序相同,每次调用后其值将长期保留(不会被内存释放),其初始值是当程序运行时第一次赋的值,以后调用不再赋初始值(再次进入f函数时,第二句赋值语句不执行),因此,第一次调用f函数时c为5(a=c++是先赋值后自增),第二次调用f函数时c为6,又因为逗号运算符的...

c语言,,这一题的运行结果是多少,为什么,求解释
程序运行的结果是10.解释如下:程序第一次执行外层的for循环时k=2,满足k<6的条件,所以执行s=1;这一句将s的值赋为1。此时j=k=2满足j<6的条件,执行s+=j;(这句等价于s=s+j;)这一句 执行结果s=s+j=1+2=3。然后执行j++,j的值变为3,满足j<6的条件。再次重复内层for循环执行s+...

C语言,答案是多少?怎么算的呢?
在这个程序里,将"POWER(i++)"替换成了"(i++)*(i++)"。因此,程序段是:int i=1;while(i<=4)printf("%d ",(i++)*(i++));开始时,i的值是1,1<=4为真,循环;因++在变量i后面,“++"运算延迟,所以i*i结果是1,屏幕输出1;然后计算延迟的两次“++”,i的值变为了3。因为...

用C语言编写的程序,执行结果是多少?
所以说“--a”输出的结果为11,“++b”输出的结果为13。

C语言问题 运行结果是多少 为什么 求详细解答
结果15 之所以容易被理解错误是由于运算符优先级的问题 解决此类问题,第一步,宏展开 k=10*MIN(i,j);即 k=10*(i)<(j)? (i):(j);第二步,根据运算符优先级、结合性判断 原式等效于 k=(10*(i))<(j)? (i):(j);二目运算符*优先级高于三目运算符? :第三步,代入值,判断...

c语言这个运行结果是什么
第一句输出和第三句输出以及第四句结果都是相同的,意思就是最后一句printf输出的就是a的地址,只是用十进制的方式输出来的。原因如下:我们知道,数组的首地址和首个元素的地址是一样的,所以&a[0]输出的就是数组a的首地址,又因为printf("%d",a)和printf("%d",&a[0])结果一致,说明输出的都...

C语言的问题,这道题的输出结果是多少,怎么算的?
argc=4 argv[0]= PROC argv[1]= ABCD argv[2]= EFGH argv[3]= IJKL 循环变量是argc、先减1后用。即:4-1=3>0输出IJKL 3-1=2大于0输出EFGH 2-1=1大于0输出ABCD 1-1=0不大于0退出循环 最终输出结果:IJKLEFGHABCD

C语言编程,求输出结果,和解释下怎么算出来的,谢谢
运行结果为:14 6 3 最外面一个for循环控制的是u的自加次数,i=1;i<=3,所以可以是i=1,i=2,i=3循环3次,那么u自加三次,由0自加三次变成3,所以u=3 j=1;j<=i的for循环控制的是t的自加次数,i=1时循环1次,i=2时循环2次,i=3时循环3次,共计6次,那么t就自加6次,...

请帮我看一段c语言代码,运行结果怎么得到的
结果是和编译器有关的。在Turbo C中,结果为24。而在devc++,vc++中,编译器从左至右求值,因此系统先求第一个++i,此时+号还需要一个操作数,接着求+号之后的++i,此时i=7,再执行相加,接着执行++i,i=8,最后相加结果就为22。而i++的运算是在计算总表达式之后进行的。以下的例子可以说明这些...

C语言编程题,结果是多少?
运行结果是51015 第一次打印是当i=5时,符合i<=15且能够被5整除,所以所以打印出来5 第二次打印是当i=10时,打印出10 第三次打印是当i=15时,打印出15 后面当程序运行到i>15时,已经不符合打印的条件所以不再打印。另外,打印语句中,没有任何间隔或分隔符号,所以程序会没有间断地连续打印出来...

相似回答