首页 > 试题广场 >

下列程序执行后输出的结果是?

[单选题]
下列程序执行后输出的结果是
#include<iostream>
using namespace std;

int f(int a)
{
    int b = 0;
    static int c = 3;
    a = c++,b++;
    return (a);
}
int main()
{
    int a = 2, i, k;
    for (i = 0; i < 2; i++)
        k = f(a++);
    printf(" % d\n", k);
    
    return 0;
}

  • 3
  • 0
  • 5
  • 4
选D,这道题目考察的是操作符的优先级,因为逗号表达式的优先级最低,所有先计算赋值操作符,再计算逗号操作符,如果将a = c++, b++写成
a = (c++, b++),则答案选B
发表于 2015-07-23 21:45:42 回复(12)
D
这里主要是考察static和参数传递的知识,在函数f中,由于是传值参数,返回结果只和c的值相关,
当i=0时,a=2,执行f(a++)即f(2++),c的初始值为3,f(2)的返回结果为3,之后,c的值变为4;
当i=1时,c的值为4,f(2)的返回结果为4,之后,c的值变为5;
编辑于 2017-08-07 10:38:09 回复(7)
static变量只会初始化一次,并且具有全局生存期,所以main函数里的第二次调用f时,c不会初始化为3,而是保持4.
发表于 2015-08-09 18:43:19 回复(0)
a = c++, b++;
关键是这里,因为逗号表达式的优先级最低,因此上句相当于:(a = c++),(b++);
即先把c的值赋给a,然后c的值加1。这里的b++其实跟本题的返回值没什么关系。
发表于 2016-08-30 00:12:22 回复(1)
此题主要考察static局部变量知识,落实到题目,答案= static 局部变量c的初值+调用 f()函数的次数
相关知识:
1、静态变量在内存的静态存储区,静态数据一直占有着该存储区单元直到程序结束;
2、静态局部变量只声明一次,一旦申请内存成功,不再接受重复申请;
3、静态局部变量的作用域与一般局部变量一样,二者区别在于以上两点:一般局部变量在函数调用结束后释放变量占用的存储单元,而静态局部变量不释放。
注意:由于静态局部变量在内存中存在的时间较长,即占用内存时间较长,故应尽量少用static来修饰变量(有刚需除外)。
发表于 2016-10-10 20:21:04 回复(0)
static变量只会初始化一次,并且具有全局生存期,所以main函数里的第二次调用f时,c不会初始化为3,而是保持4.
第一次调用c为3 a也为3 返回3 此时c为4。 第二次调用 c为4 a也为4 返回4此时c为5
发表于 2017-03-26 19:05:35 回复(1)
记住一点就好了:逗号运算符的优先级是所有运算符中优先级最低的。
发表于 2015-08-19 10:11:24 回复(0)
SdV头像 SdV
第一次调用时,先给a赋值3,后c变4,k获取的是3
第二次调用时,先给a赋值4,后c变5,k获取的是4
故选4而不是5
编辑于 2020-11-19 20:02:29 回复(0)
答案:D 
本题和函数中的b根本没有关系,那个逗号只是分隔两个语句。为了不和实参当中的a混淆,把函数形参改为了x。
由于函数是传值,所以其实和实参里面的a也没有关系,所以a++也可以改成a
#include<iostream>
using namespace std;
 
int f(int x)
{
    
    static int c = 3;
    x = c++;
     return(x);
}
int main()
{
    int a = 2, i, k;
    for(i = 0; i < 2; i++)
        k = f(a);
    printf(" % d\n", k);
     
    return 0;
}
这样本题只需要主要到两个知识点就可以了:1,stastic 2,c++和++c的区别
本题调用两次函数,第一次调用函数返回k值为3(c++先使用再递增)c的值变为4,第二次调用返回k值为4(static会保持上一次调用之后的值,c++是先使用后递增)c的值变为5。

发表于 2015-06-28 09:49:08 回复(0)
看评论是这题目变了吗?不是b吗
发表于 2017-08-16 16:36:00 回复(4)
a = c++, b++
a = (c++, b++)
两者结果不一样
逗号运算符的优先级最低 
发表于 2016-10-07 17:21:56 回复(0)

f ,逗号优先级最低


发表于 2019-03-06 18:56:39 回复(0)
逗号得优先级最低
发表于 2022-07-01 08:33:51 回复(0)
逗号的优先级最低
发表于 2021-05-09 21:30:43 回复(0)
1、静态变量在整个生命周期中只有一份,并且初始化了之后便保持不变(除非对他进行加减等操作)
2、静态变量会有默认初始值0
3、逗号运算符优先级最低!
发表于 2021-03-01 10:32:28 回复(0)

等号优先级大于逗号优先级
发表于 2020-06-09 10:03:15 回复(0)
重点是运算符的优先级别,后增运算符的优先级>赋值运算符>逗号运算符,所以,函数中c++被赋值给a与b的值无关,然后就是static变量在函数调用期间一直存在不销毁
发表于 2019-11-13 00:22:29 回复(0)
逗号运算符的优先级比赋值运算符的低
发表于 2019-08-08 08:05:56 回复(0)
函数里面的a++传给函数后,函数里面用的是a值还是加一后的值
发表于 2019-07-09 17:29:32 回复(0)
主要考察static和逗号表达式,staitc保持值的生命周期一直存在,逗号表达式优先级最低,所以先赋值
发表于 2019-03-28 22:01:20 回复(0)