1 单选题(每题 2 分,共 30 分)
第1题 运行下面程序后变量 a 的值是( )。
|
1│int a = 42; 2│int* p = &a; 3│*p = *p + 1; |
A. 42 B. 43 C. 编译错误 D. 不确定
解析:答案B。*p指向变量a,*p=*p+1即a=a+1,运行程序后变量a的值是43。故选B。
第2题 以下关于数组的描述中,( )是错误的。
A. 数组名是一个指针常量
B. 随机访问数组的元素方便快捷
C. 数组可以像指针一样进行自增操作
D. sizeof(arr)返回的是整个数组 arr 占用的字节数
解析:答案C。数组名表示首元素地址,类型为T* const(不可修改的指针),为指针常,A正确;通过下标(如arr[i])可O(1)时间复杂度访问任意元素,B正确;数组名虽然是首元素的地址(指针常量),但它不能直接进行自增操作(如arr++),C错误;sizeof作用于数组名时返回总大小(如int arr[5]返回5*sizeof(int)),D正确。故选C。
第3题 给定如下定义的数组arr,则 *(*(arr + 1) + 2) 的值是( )。
|
1│int arr[2][3] = { {1, 2, 3}, {4, 5, 6}}; |
A. 2 B. 5 C. 4 D. 6
解析:答案D。二维数组名退化为指针,指向数组的行,*(arr + 1)指向第2行第1个元素,再+2,指向第3个元素,*解引用获取指针指向元素的值,相当于arr[1][2],等于6。故选D。
第4题 下面这段代码会输出( )。
|
1│int add(int a, int b = 1); // 函数声明 2│ 3│int main() { 4│ cout << add(2) << " " << add(2, 3); 5│ return 0; 6│} 7│ 8│int add(int a, int b) { // 函数定义 9│ return a + b; 10│} |
A. 3 5 B. 编译失败:定义处少了默认参数
C. 运行错误 D. 链接失败:未定义引用
解析:答案A。add(2),a=2,b=1(默认),返回a+b=2+1=3;add(2, 3),a=2,b=3,返回a+b=2+3=5。选A。
第5题 下面这段代码会输出( )。
|
1│int x = 5; 2│ 3│void foo() { 4│ int x = 10; 5│ cout << x << " "; 6│} 7│ 8│void bar() { 9│ cout << x << " "; 10│} 11│ 12│int main() { 13│ foo(); 14│ bar(); 15│} |
A. 5 5 B. 10 10 C. 5 10 D. 10 5
解析:答案D。在所有函数外定义的int x=5是全局变量,在foo()函数中又定义了一个同名局部变量int x=10,所以第5行输出的x是局部变量x,输出10,如要输出 全局变量x,则需用::x表示;在bar()中没有定义同名局部变量x,所以第9行输出的x是全局变量x,输出5;总体输出10 5,故选D。
第6题 下面程序运行的结果是( )。
|
1│void increaseA(int x) { 2│ x++; 3│} 4│void increaseB(int* p) { 5│ (*p)++; 6│} 7│int main() { 8│ int a = 5; 9│ increaseA(a); 10│ cout << a << " "; 11│ increaseB(&a); 12│ cout << a; 13│} |
A. 6 7 B. 6 6 C. 5 6 D. 5 5
解析:答案C。increaseA()函数是值传递,第9行调用时将a的值 5传递给形参x,对x的修改不影响传递变量a,所以第10行输出的a的值 为5;increaseB()是指针传递,第11行调用时将a的地址传递给形参p,对*p就是对a的修改,(*p)++是指针指向类型变量自增,等价a++,所以第12行输出的a的值为6;总体输出5 6,故选C。
第7题 关于结构体初始化,以下四个选项中正确的是( )。
|
1│struct Point {int x,y;}; |
A. Point p = (1,2); B. Point p = {1,2}; C. Point p = new {1,2}; D. Point p = <1,2>;
解析:答案B。结构体初始化用{},排除A、D;B是列表初始化,x 和 y 分别被赋值为 1 和 2,B正确;new 返回的是指针,不能直接赋值给非指针变量,正确写法:
Point* p = new Point(1, 2);
D错误。故选B。
第8题 运行如下代码会输出( )。
|
1│struct Cat { 2│ string name; 3│ int age; 4│}; 5│ 6│void birthday(Cat& c) { 7│ c.age++; 8│} 9│ 10│int main() { 11│ Cat kitty{"Mimi", 2}; 12│ birthday(kitty); 13│ cout << kitty.name << " " << kitty.age; 14│} |
A. Mimi 2 B. Mimi 3 C. kitty 3 D. kitty 2
解析:答案B。第11行定义了结构体结构体kitty,并初始化用name为“Mimi”、age为2

最低0.47元/天 解锁文章
3600

被折叠的 条评论
为什么被折叠?



