#5000. 【指针】【客观题2】
【指针】【客观题2】
单选题
第1题 以下哪个符号用于声明指针? {{ select(1) }}
&*->#
- 引用可以重新绑定到其他变量吗? {{ select(2) }}
- 可以
- 不可以
- 仅当引用是
const时 - 仅当使用
int const时
-
以下代码的输出是?
int x = 5; int &y = x; y = 8; cout << x;{{ select(3) }}
- 5
- 8
- 编译错误
- 随机值
-
指针的特性是?
{{ select(4) }}
- 必须初始化
- 是变量的别名
- 可以指向空地址
- 不能进行算术运算
-
以下代码中,
p的类型是?int a = 10; int *const p = &a;{{ select(5) }}
- 指向常量的指针
- 常量指针(地址不可变)
- 指向常量的常量指针
- 普通指针
-
以下代码的输出是?
int a = 3, b = 5; int *p = &a; p = &b; cout << *p;{{ select(6) }}
- 3
- 5
a的地址b的地址
-
引用的底层实现通常是?
{{ select(7) }}
- 宏定义
- 指针
- 结构体
- 函数
-
以下哪项是“指向
int的常量指针”的正确声明?{{ select(8) }}
int const *p;const int *p;int *const p;const int *const p;
-
关于引用,错误的是?
{{ select(9) }}
- 必须初始化
- 可以指向空值
- 引用是变量的别名
- 引用不可重新绑定
-
以下代码中,
ptr最终指向?int arr[] = {1, 2, 3}; int *ptr = arr; ptr++;{{ select(10) }}
arr[0]的地址arr[1]的地址arr[2]的地址- 随机地址
-
以下哪项可能会导致编译错误?
{{ select(11) }}
int *p = nullptr;int &r = *p;int a; int &r = a;int *p; p = nullptr;
-
const int &r = 5;是否合法?{{ select(12) }}
- 合法
- 非法,因为字面量不能绑定到非
const引用 - 合法,但必须用
const引用 - 非法,必须用指针
-
以下代码的输出是?
int a = 10; int *p = &a; int **pp = &p; cout << **pp;{{ select(13) }}
- 10
a的地址p的地址- 编译错误
-
关于指针和引用,正确的是?
{{ select(14) }}
- 指针可以为空,引用不能
- 指针需要解引用,引用直接使用
- 两者都可以重新绑定
- A和B都对
-
以下代码的输出是?
int x = 5; int *p = &x; int &r = *p; r = 10; cout << x;{{ select(15) }}
- 5
- 10
- 地址值
- 编译错误
-
已知
int x = 10; int *p = &x;,以下哪项是“指向指针常量(地址不可变)的引用”?{{ select(16) }}
const int *&r = p;int &const *r = p;int *const &r = p;const int &*r = p;
-
函数参数为引用时,实参如何传递?
{{ select(17) }}
- 拷贝值
- 直接操作原变量
- 传递地址
- 由编译器决定
-
以下代码的输出是?
int a = 5; int *p = &a; (*p)++; cout << a;{{ select(18) }}
- 5
- 6
- 地址值
- 编译错误
-
以下代码的输出是?
int arr[3] = {10, 20, 30}; int *p = arr + 1; cout << *p;{{ select(19) }}
- 10
- 20
- 30
- 编译错误
-
调用
void func(int &x)的正确方式是?{{ select(20) }}
func(5);func(a);(a是int变量)func(&a);func(*a);
-
关于
const指针,正确的是?{{ select(21) }}
const int *p可修改指针地址int *const p可修改指向的值const int *const p不可修改值和地址- 以上全对
-
引用作为函数返回值的风险是?
{{ select(22) }}
- 返回局部变量的引用
- 返回动态内存的引用
- 返回全局变量的引用
- 无风险
-
以下代码的输出是?
int a = 7; int *p = &a; int &r = *p; r = 9; cout << a;{{ select(23) }}
- 7
- 9
- 地址值
- 编译错误
-
以下代码的输出是?
int a = 5; int *p1 = &a; int *p2 = p1; (*p2)++; cout << a;{{ select(24) }}
- 5
- 6
- 地址值
- 编译错误
-
合法的指针运算是?
{{ select(25) }}
- 指针相加
- 指针相减(同一数组内)
- 指针与整数相乘
- 指针与浮点数相加
-
int **pp的含义是?{{ select(26) }}
- 指向指针的指针
- 二维数组指针
- 指向整型的引用
- 无效声明
-
以下代码的问题在于?
int *p; *p = 5;{{ select(27) }}
- 未初始化指针
- 内存泄漏
- 野指针(指向无效内存地址)
- A和C都对
判断题
- 引用必须初始化,且不能指向其他变量。
{{ select(28) }}
- 正确
- 错误
int *p;是合法的未初始化指针声明。
{{ select(29) }}
- 正确
- 错误
const int *p表示指针指向的地址不可修改。
{{ select(30) }}
- 正确
- 错误
- 引用的地址和其绑定的变量地址相同。
{{ select(31) }}
- 正确
- 错误
- 函数参数传递引用时,形参和实参共享内存地址。
{{ select(32) }}
- 正确
- 错误
- 指针的指针(
int **pp)可指向二维数组。
{{ select(33) }}
- 正确
- 错误
int a; int &b=a; int &c=b;是合法的。
{{ select(34) }}
- 正确
- 错误
- 引用可以指向另一个引用。
{{ select(35) }}
- 正确
- 错误
const int &r = 10;是合法的。
{{ select(36) }}
- 正确
- 错误
- 指针可以指向引用。
{{ select(37) }}
- 正确
- 错误
int &r = nullptr;是合法的。
{{ select(38) }}
- 正确
- 错误
void func(int *&p)可以修改指针的地址。
{{ select(39) }}
- 正确
- 错误
int a[] = {1,2,3}; int *p = &(a + 1);是合法的。
{{ select(40) }}
- 正确
- 错误