发布网友 发布时间:2022-06-05 03:01
共5个回答
热心网友 时间:2022-07-09 12:49
因为变量c是静态局部变量,所以其生存期与程序相同,每次调用后其值将长期保留(不会被内存释放),其初始值是当程序运行时第一次赋的值,以后调用不再赋初始值(再次进入f函数时,第二句赋值语句不执行),
因此,第一次调用f函数时c为5(a=c++是先赋值后自增),第二次调用f函数时c为6,又因为逗号运算符的优先级低于赋值运算符,所以变量a被赋值为变量c(而不是变量b),并被返回给k,因此第一次调用f后k为5,第二次调用f后k为6,
程序打印的是第二次调用f后k的结果,所以输出6.
热心网友 时间:2022-07-09 12:50
这是个有趣的问题, 程序代码本身很多混淆,冗余。
这里容易造成困惑的关键点在于 逗号表达式和 赋值运算符 谁的优先级高。
即:a= c++,b++; 如果理解为 a=c++; b++; 还是理解为 a =(c++,b++);
逗号表达式优先级最低,这里应理解为 a=c++; b++;
函数 f 的 参数多余, b多余,简化后,函数等效下图:
热心网友 时间:2022-07-09 12:50
f()里面a的值被赋于c的值,为5,与原来进来是多少没有关系,f()的返回值只与里面的c有关,总是返回5。热心网友 时间:2022-07-09 12:51
6热心网友 时间:2022-07-09 12:52
k的输出值是 6