第一题
1. 下面指针所指向的内容,可以修改的是()
A:const int* a
B:int const* b
C:int* const c
D:const int* const d
答案及解析 C
const 在 * 左侧,指针指向的内容不可以修改;
const 在 * 右侧,指针本身不可修改
第二题
2. 假设变量a,b均为整型,表达式值为()
(a = 5, b = 2, a > b ? a++ : b++, a + b)
A:7
B:8
C:9
D:2
答案及解析 B
本题考查的是一个逗号表达式,逗号表达式要依次计算每个表达式的结果,但是逗号表达式的结果是最后一个逗号后面的表达式结果。要依次计算的原因是前面的表达式会影响到最后一个表达式计算的结果。
第三题
3. 以下程序的输出结果是( )
#include <stdio.h> int main() { unsigned char a = 235; unsigned char b = ~a; unsigned char c = b >> 1; printf(“%d”, c); }
A:6
B:2
C:4
D:10
答案及解析 D
本题考查的是无符号数进行位运算,首先要知道无符号数的二进制位的最高位是数值位,不是符号位。其次char类型是有1个字节,8个比特位;
a :1 1 1 0 1 0 1 1
b : 0 0 0 1 0 1 0 0
c : 0 0 0 0 1 0 1 0
c = 10
第四题
4. 有以下定义,下列选项的表达式哪些会被编译器禁止 ()【多选】
int a = 248, b = 4; int const c = 21; const int *d = &a; int *const e = &b; int const * const f = &a;
A:*c=32
B:*d=43
C:e=&a
D:f=0x321f
E:d=&b
F:*e=34
答案及解析 ABCD
const 在 * 左侧,指针指向的内容不可以修改;
const 在 * 右侧,指针本身不可修改
第五题
5. 以下程序的输出是()
#include <stdio.h> struct HAR { int x,y; struct HAR *p; } h[2]; int main() { h[0].x = 1; h[0].y = 2; h[1].x = 3; h[1].y = 4; h[0].p = &h[1]; h[1].p = h; printf("%d,%d \n", (h[0].p)->x, (h[1].p)->y); }
A:1,2
B:2,3
C:1,4
D:3,2
答案及解析 D
这是一个结构体数组,之后对它们依次赋值,结果如下图:
在输出语句中访问: