#6009. 指针与数组专项练习1

指针与数组专项练习1

一、单选题(共15题,每题2分)

  1. 关于指针的定义,以下哪个选项是正确的?{{ select(1) }}
  • int ptr;
  • int &ptr;
  • int* ptr;
  • int ptr*;
  1. 对于 int x = 10; int* p = &x;,以下哪个表达式可以获取x的值?{{ select(2) }}
  • *p
  • &p
  • p
  • *x
  1. 如果有 int arr[5] = {1, 2, 3, 4, 5}; int* p = arr;,那么 *(p + 2) 的值是多少?{{ select(3) }}
  • 1
  • 2
  • 3
  • 4
  1. 指针变量进行++操作时,实际增加的字节数取决于什么?{{ select(4) }}
  • 指针本身的字节大小
  • 指针指向的数据类型的大小
  • 操作系统位数
  • 编译器的实现
  1. 对于 int a[3][4],以下哪个表达式等价于 a[i][j]?{{ select(5) }}
  • *(a + i + j)
  • *(*(a + i) + j)
  • *(a + i) + j
  • a + i * 4 + j
  1. 执行以下代码后,输出什么?{{ select(6) }}
    int arr[] = {10, 20, 30, 40};
    int* p = arr;
    p++;
    cout << *p;
    
  • 10
  • 20
  • 30
  • 40
  1. 对于 int arr[5];arr 本身代表什么?{{ select(7) }}
  • 数组第一个元素的值
  • 数组第一个元素的地址
  • 整个数组的值
  • 数组的大小
  1. 以下哪种写法是合法的?{{ select(8) }}
  • int arr[5]; arr++
  • int* p; p++
  • int& r; r++
  • 5[arr] 其中arr是数组名
  1. 有两个指针 p1p2 指向同一数组的不同元素,p2 - p1 的结果是什么?{{ select(9) }}
  • 两个地址值的字节差
  • 两个地址值的元素个数差
  • 编译错误
  • 未定义行为
  1. 对于二维数组 int a[3][4]a[1] 的类型是什么?{{ select(10) }}
  • int
  • int*
  • int[4](在表达式中退化为int*
  • int**
  1. 执行以下代码后,输出什么?{{ select(11) }}
    int arr[] = {1, 2, 3, 4, 5};
    int* p = arr + 4;
    cout << *(p - 2);
    
  • 2
  • 3
  • 4
  • 5
  1. 关于取址符&,以下说法正确的是?{{ select(12) }}
  • 只能用于变量,不能用于数组元素
  • 只能用于左值
  • 可以用于常量,如 &10
  • 只能用于指针变量
  1. 对于 int a[3][4];,以下哪个表达式得到的是第2行第3列的地址?{{ select(13) }}
  • &a[2][3]
  • a[2] + 3
  • *(a + 2) + 3
  • 以上都是
  1. 执行以下代码后,输出什么?(假设int占4字节){{ select(14) }}
    int arr[10];
    int* p = &arr[2];
    int* q = &arr[5];
    cout << (q - p);
    
  • 3
  • 12
  • 不确定
  • 编译错误
  1. 对于二维数组 int a[3][4],以下哪个表达式不合法?{{ select(15) }}
  • a[0] + 1
  • &a[0][0] + 1
  • a + 1
  • a++

二、判断题(共10题,每题2分)

  1. 数组名作为右值时,代表数组首元素的地址。{{ select(16) }}
  • 正确
  • 错误
  1. 对指针执行++操作,指针的地址值总是增加1。{{ select(17) }}
  • 正确
  • 错误
  1. int* p = nullptr; *p = 10; 是安全的操作。{{ select(18) }}
  • 正确
  • 错误
  1. 两个指向不同数组的指针相减是合法的操作。{{ select(19) }}
  • 正确
  • 错误
  1. 对于一维数组arr,arr[i]i[arr] 在语法上都是合法的。{{ select(20) }}
  • 正确
  • 错误
  1. 二维数组名a的类型是int**。{{ select(21) }}
  • 正确
  • 错误
  1. 指针变量存储的是内存地址。{{ select(22) }}
  • 正确
  • 错误
  1. 对于 int a[5]; int* p = a;p&a[0] 的值相同。{{ select(23) }}
  • 正确
  • 错误
  1. 使用指针访问数组元素比使用下标访问效率更高。{{ select(24) }}
  • 正确
  • 错误
  1. 在C++中,可以定义一个指向指针的指针,如 int** pp;。{{ select(25) }}
  • 正确
  • 错误