1. 若有如下定义,则?p1=&m;p2=p1;?是正确赋值语句.说法是否正确?
int *p1;
int *p2;
int m = 5;
int n;
A:正确
B:错误
本题考查的是对类型的认识,p1是指针类型,赋值的右操作数就必须是地址;
2. 在64位下,下面代码运行的结果为()
#include <stdio.h>
int main()
{
char str[] = "abcde";
const char *p = "abcde";
printf("%lu %lu\n", sizeof(str), sizeof(p));
return 0;
}
A:8 8?
B:4 4
C:5 8
D:6 8
这里想给大家说的就是,只有size(数组名)才是表示的整个数组的大小,注意字符串末尾有隐藏的\0,所以是6,但是对于第二个是一个指针类型执指向了一个字符串,我们知道sizeof是求数据类型的字节数,那64位下,指针类型就是8;
3. 已知int i=0,x=0;,在下面while语句执行时循环次数为()
while (!x && i< 3)
{
x++;
i++;
}
A:4
B:3
C:2
D:1
本题想考查大家对操作符优先级和运算顺序
&&优先级最低,而结合性是从左往右,也就是先算左,左边为真继续算,为假就不需要算了
0为假,非0为真
C语言操作符优先级表格(建议收藏,每次看一下)-CSDN博客
所以第一次循环,x = 0,!x 就是真,i = 0 ,确实小于3,条件成立
第二次循环,x = 1 ,!x 就是假,&&一假就是假,所以条件不成立,退出循环
4. 预处理阶段进行了哪些()
A:宏替换
B:头文件展开
C:去注释
D:进行条件编译判断
E:都对
预处理阶段就是处理上面选项中的内容
5. func(1)的值是多少?
int func(int a)
{
int b;
switch(a)
{
case 1:b = 100;
case 2:b = 200;
case 3:b = 250;
default:b = 0;
}
return b;
}
A:100
B:200
C:250
D:0
本题就很好的验证了switch语句中case或者default后面没有break语句就会一直执行下去,所以当a = 1的时候,是满足case1的,由于下面的每一个语句都没有break,就会依次执行
我们的b 就被依次赋值为100,200,250,0;最后赋值的是0,结果就为0;