指针相关博客
第一题
1. 若有如下定义,则 p1=&m;p2=p1; 是正确赋值语句.说法是否正确?
int *p1; int *p2; int m = 5; int n;
A:正确
B:错误
答案及解析 A
本题考查的是对类型的认识,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
答案及解析 D
这里想给大家说的就是,只有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
答案及解析 D
本题想考查大家对操作符优先级和运算顺序
&&优先级最低,而结合性是从左往右,也就是先算左,左边为真继续算,为假就不需要算了
0为假,非0为真
C语言操作符优先级表格(建议收藏,每次看一下)-CSDN博客
所以第一次循环,x = 0,!x 就是真,i = 0 ,确实小于3,条件成立
第二次循环,x = 1 ,!x 就是假,&&一假就是假,所以条件不成立,退出循环
第四题
4. 预处理阶段进行了哪些()
A:宏替换
B:头文件展开
C:去注释
D:进行条件编译判断
E:都对
答案及解析 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
答案及解析 D
本题就很好的验证了switch语句中case或者default后面没有break语句就会一直执行下去,所以当a = 1的时候,是满足case1的,由于下面的每一个语句都没有break,就会依次执行
我们的b 就被依次赋值为100,200,250,0;最后赋值的是0,结果就为0;