C语言选择题

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

第91题. C语言中,if语句括号里面 if(5),下面描述正确的是()
正确选项:
解析:C语言没有专门布尔类型,**非0即为真,0代表假**。5是非0整数,条件判定为真。if(0)条件为假。不要和其他语言混淆,任何非0数字、负数都会被判定逻辑真。
第92题. 下面转义字符代表回车,光标移动到本行开头的是()
正确选项:
解析:\n换行,光标跳到下一行开头;\r回车,光标回到当前行最左侧;\t水平制表Tab;\b退格,光标向左回退一格。Windows文本文件换行是"\r\n"两个字符。
第93题. 若 int *p = NULL;,以下哪行代码会造成程序段错误崩溃()
正确选项:
解析:NULL是空指针,表示不指向任何合法内存地址。对空指针做解引用*p,访问0地址内存,属于非法内存访问,直接程序崩溃。单纯指针赋值、判断是否等于NULL不会产生崩溃。
第94题. 下面关于strcmp函数说法正确的是()
正确选项:
解析:strcmp按照ASCII码逐字符对比,不是比较字符串长度。相等返回0;第一个字符串大于第二个返回正数;小于返回负数。函数只读字符串,不会修改原字符串。
第95题. C语言函数参数传递,默认传递方式是()
正确选项:
解析:C语言全部参数默认值传递,调用时拷贝一份实参的值给形参。函数内部修改形参,不会影响外部实参。想要修改外部变量,需要主动传入变量地址即模拟地址传递;引用传递是C++特性,C语言不存在。
第96题. 若 int a[6]={2,4,6,8,10,12},*p=a;,表达式*(p+3)的值是()
正确选项:
解析:p指向数组首元素a[0]。指针算术不是直接加字节,按指向的数据类型偏移。p+3向后跳过3个int元素,等价&a[3];*(p+3)等价a[3],数组a[3]=8。记住公式:*(p+i)完全等价a[i]。
第97题. C语言中continue语句的作用是()
正确选项:
解析:continue只能用于循环。遇到continue,本轮循环剩下代码不再执行,直接跳回循环条件判断。break才是跳出本层循环;continue不能直接用在switch语句内部。
第98题. 下面关于共用体union描述正确的是()
正确选项:
解析:共用体union所有成员共用同一块内存空间,占用内存取占用字节最多的成员。修改其中任意一个成员,会覆盖其他成员数据。struct结构体各个成员各自独立分配内存。
第99题. 表达式 !(3>2 || 5<1) 的运算结果是()
正确选项:
解析:先算括号内部:3>2为真,||逻辑或发生短路,5<1不再运算,括号整体结果为1。!做逻辑取反,!1得到0。德摩根定律:!(A||B)等价!A&&!B,可以用来验算逻辑表达式。
第100题. 函数形参写为 int arr[],编译器实际处理等价于()
正确选项:
解析:一维数组作为函数形参,编译器自动把数组退化为指针int*。方括号里面写任何数字都会被编译器直接忽略。函数内部sizeof(arr)得到的是指针所占字节,不是原始数组总大小。