#6009. 指针与数组专项练习1
指针与数组专项练习1
一、单选题(共15题,每题2分)
- 关于指针的定义,以下哪个选项是正确的?{{ select(1) }}
int ptr;int &ptr;int* ptr;int ptr*;
- 对于
int x = 10; int* p = &x;,以下哪个表达式可以获取x的值?{{ select(2) }}
*p&pp*x
- 如果有
int arr[5] = {1, 2, 3, 4, 5}; int* p = arr;,那么*(p + 2)的值是多少?{{ select(3) }}
- 1
- 2
- 3
- 4
- 指针变量进行++操作时,实际增加的字节数取决于什么?{{ select(4) }}
- 指针本身的字节大小
- 指针指向的数据类型的大小
- 操作系统位数
- 编译器的实现
- 对于
int a[3][4],以下哪个表达式等价于a[i][j]?{{ select(5) }}
*(a + i + j)*(*(a + i) + j)*(a + i) + ja + i * 4 + j
- 执行以下代码后,输出什么?{{ select(6) }}
int arr[] = {10, 20, 30, 40}; int* p = arr; p++; cout << *p;
- 10
- 20
- 30
- 40
- 对于
int arr[5];,arr本身代表什么?{{ select(7) }}
- 数组第一个元素的值
- 数组第一个元素的地址
- 整个数组的值
- 数组的大小
- 以下哪种写法是合法的?{{ select(8) }}
int arr[5]; arr++int* p; p++int& r; r++5[arr]其中arr是数组名
- 有两个指针
p1和p2指向同一数组的不同元素,p2 - p1的结果是什么?{{ select(9) }}
- 两个地址值的字节差
- 两个地址值的元素个数差
- 编译错误
- 未定义行为
- 对于二维数组
int a[3][4],a[1]的类型是什么?{{ select(10) }}
intint*int[4](在表达式中退化为int*)int**
- 执行以下代码后,输出什么?{{ select(11) }}
int arr[] = {1, 2, 3, 4, 5}; int* p = arr + 4; cout << *(p - 2);
- 2
- 3
- 4
- 5
- 关于取址符&,以下说法正确的是?{{ select(12) }}
- 只能用于变量,不能用于数组元素
- 只能用于左值
- 可以用于常量,如
&10 - 只能用于指针变量
- 对于
int a[3][4];,以下哪个表达式得到的是第2行第3列的地址?{{ select(13) }}
&a[2][3]a[2] + 3*(a + 2) + 3- 以上都是
- 执行以下代码后,输出什么?(假设int占4字节){{ select(14) }}
int arr[10]; int* p = &arr[2]; int* q = &arr[5]; cout << (q - p);
- 3
- 12
- 不确定
- 编译错误
- 对于二维数组
int a[3][4],以下哪个表达式不合法?{{ select(15) }}
a[0] + 1&a[0][0] + 1a + 1a++
二、判断题(共10题,每题2分)
- 数组名作为右值时,代表数组首元素的地址。{{ select(16) }}
- 正确
- 错误
- 对指针执行++操作,指针的地址值总是增加1。{{ select(17) }}
- 正确
- 错误
int* p = nullptr; *p = 10;是安全的操作。{{ select(18) }}
- 正确
- 错误
- 两个指向不同数组的指针相减是合法的操作。{{ select(19) }}
- 正确
- 错误
- 对于一维数组arr,
arr[i]和i[arr]在语法上都是合法的。{{ select(20) }}
- 正确
- 错误
- 二维数组名a的类型是
int**。{{ select(21) }}
- 正确
- 错误
- 指针变量存储的是内存地址。{{ select(22) }}
- 正确
- 错误
- 对于
int a[5]; int* p = a;,p和&a[0]的值相同。{{ select(23) }}
- 正确
- 错误
- 使用指针访问数组元素比使用下标访问效率更高。{{ select(24) }}
- 正确
- 错误
- 在C++中,可以定义一个指向指针的指针,如
int** pp;。{{ select(25) }}
- 正确
- 错误