C语言选择题

练习二级选择题,点击选项即可查看结果

第181题. C语言中,数组名作为函数实参传递给函数,实际传递的是()
正确选项:
解析:数组名作为函数实参,会退化为指针,传递数组首元素内存地址。函数内部拿到地址,可以修改原始数组元素内容;但是在被调函数内部无法用sizeof获取原始数组总字节,需要额外传入数组长度。
第182题. 执行 enum {A,B,C=5,D};,D的值是()
正确选项:
解析:枚举常量,不赋值默认从上一个常量+1。A=0,B=1,C手动赋值5,D没有赋值,在C基础上加1,D等于6。枚举本质是int类型常量,不是变量,运行期间不能修改。
第183题. 下面表达式,能够判断int变量x是奇数的是()
正确选项:
解析:负数取模在C语言中,负数奇数x%2结果为‑1,不等于1。因此x%2==1不能正确判断负奇数。x%2!=0,无论正负奇数,余数不等于0,可正确识别奇数。x&1按位与,奇数最低二进制位为1,判断条件应为(x&1)==1。
第184题. 有 char *p="hello world";,以下说法正确的是()
正确选项:
解析:"hello world"字符串字面量存放在只读常量段,不是栈;指针p保存字符串首字符'h'的地址。尝试修改p指向的字符串内容,会触发程序运行时崩溃;p仅仅保存地址,不保存全部字符串。
第185题. 执行int a=4; a+=a‑=a*a;,变量a最终值为()
正确选项:
解析:复合赋值运算符结合性从右向左。第一步 a‑=a*a;a = a‑(a*a) =4‑16=‑12;第二步 a+=a;a =‑12 + (‑12) =‑24。每一步运算都会修改变量a本身,不能直接代数展开计算。二级高频复合赋值计算题。
第186题. 关于break语句,下列说法正确的是()
正确选项:
解析:break作用:跳出最近一层循环(for、while、do‑while)或者switch分支。不能作用于if;continue才是进入下一轮循环;break和goto没有关系。多层嵌套循环,break只跳出直接包裹它的那一层。
第187题. 已有定义 double x;,下面输入语句正确的是()
正确选项:
解析:scanf读取double类型变量,格式控制符必须%lf;float类型才用%f。scanf必须传入变量地址,不能直接写变量名。printf输出double,%f与%lf都可以,但是scanf严格区分%f与%lf,属于高频考点。
第188题. 下面程序片段输出结果 int i=0; for(;i++<3;); printf("%d",i);()
正确选项:
解析:for循环第三个表达式在每次循环体结束执行,本题循环体为空。i从0开始,i++<3判断,当i等于3时,条件不成立,判断之后i依然自增,i变成4,循环终止。注意for循环第二部分是循环条件,后置++会先取值比较再自增。
第189题. C语言中,全局未初始化变量和局部未初始化变量,默认值分别是()
正确选项:
解析:全局变量存储静态存储区,程序加载自动初始化为0;局部自动变量存储栈区,没有初始化,内存中是栈遗留的随机垃圾数据。static修饰局部变量,未初始化也自动置0。
第190题. 若有 int arr[]={1,2,3,4,5,6}; int *p=arr;,表达式*(p+3)的值是()
正确选项:
解析:p指向数组首元素arr[0]。指针p+3不是地址直接加3字节;int占4字节,实际地址偏移3*sizeof(int),指向arr[3]。*(p+3)等价arr[3],数组下标从0开始,arr[3]=4。指针加减以指向类型大小为单位偏移。