#6010. 指针与数组专项练习2

指针与数组专项练习2

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

  1. 执行以下代码,输出结果是什么?{{ select(1) }}
    int arr[] = {5, 10, 15, 20};
    int* p = arr;
    cout << *p++ << endl;
    cout << *p;
    
  • 5 和 5
  • 5 和 10
  • 10 和 10
  • 10 和 15
  1. 对于 int a[3][4],以下哪个表达式得到的是元素a[2][1]的地址?{{ select(2) }}
  • a[2] + 1
  • *(a + 2) + 1
  • &a[2][1]
  • 以上都是
  1. 关于指针减法,以下说法正确的是?{{ select(3) }}
  • 指针减去指针得到的是字节数差值
  • 指针减去整数得到的是新地址
  • 两个任意指针都可以相减
  • 指针减法结果类型是int*
  1. 执行以下代码,ptr指向哪里?{{ select(4) }}
    int nums[] = {1, 2, 3, 4, 5};
    int* ptr = nums + 3;
    ptr -= 2;
    
  • nums[0]
  • nums[1]
  • nums[2]
  • nums[3]
  1. 对于 int arr[5]&arr + 1 表示什么?{{ select(5) }}
  • 数组第二个元素的地址
  • 数组最后一个元素的地址
  • 数组末尾之后的下一个地址(跳过整个数组)
  • 编译错误
  1. 执行以下代码,输出什么?{{ select(6) }}
    int a[] = {1, 2, 3, 4};
    int* p = a;
    int* q = p + 3;
    cout << q - p;
    
  • 12
  • 3
  • 4
  • 不确定
  1. 对于二维数组 int matrix[3][3],以下哪个表达式是合法的右值?{{ select(7) }}
  • matrix++
  • matrix[1]++
  • *(matrix + 1) + 1
  • &(*matrix + 1) + 1
  1. 执行以下代码,输出什么?{{ select(8) }}
    int x = 10;
    int* p = &x;
    int** pp = &p;
    cout << **pp;
    
  • x的地址
  • 10
  • p的地址
  • 编译错误
  1. 关于int* p = new int[10];,以下释放内存的正确方式是?{{ select(9) }}
  • delete p;
  • free(p);
  • delete[] p;
  • malloc_free(p);
  1. 对于 int arr[5] = {0}; int* p = arr + 5;p - arr 的值是多少?{{ select(10) }}
  • 20
  • 5
  • 不确定
  • 编译错误
  1. 执行以下代码,输出什么?{{ select(11) }}
    int arr[3][2] = {{1, 2}, {3, 4}, {5, 6}};
    int* p = &arr[0][0];
    p += 3;
    cout << *p;
    
  • 3
  • 4
  • 5
  • 6
  1. 以下哪个选项不是取地址操作的正确用法?{{ select(12) }}
  • int* p = &x;(x是int变量)
  • int* p = &(x + y);(x和y是int)
  • int* p = &arr[0];(arr是数组)
  • int** pp = &p;(p是int*)
  1. 对于一维数组int arr[10]arr&arr[0]的关系是?{{ select(13) }}
  • 类型相同,值相同
  • 类型不同,值相同
  • 类型相同,值不同
  • 类型不同,值不同
  1. 执行以下代码,输出什么?{{ select(14) }}
    int arr[] = {10, 20, 30, 40};
    int* p = arr;
    int* q = p + 1;
    cout << *q << " " << q[1];
    
  • 20 20
  • 20 30
  • 20 40
  • 30 40
  1. 对于二维数组int a[3][4],以下哪个表达式得到的是第1行的首地址?{{ select(15) }}
  • a[1]
  • *(a + 1)
  • &a[1][0]
  • 以上都是

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

  1. 对空指针进行解引用操作会导致程序崩溃。{{ select(16) }}
  • 正确
  • 错误
  1. 指针变量可以进行乘除运算。{{ select(17) }}
  • 正确
  • 错误
  1. 对于数组int a[10],a和&a的值相同但类型不同。{{ select(18) }}
  • 正确
  • 错误
  1. 两个指针相减的结果类型是int。{{ select(19) }}
  • 正确
  • 错误
  1. 在C++中,可以定义void类型的变量,但不能定义void类型的指针。{{ select(20) }}
  • 正确
  • 错误
  1. 对于二维数组,a[i][j]的指针等价形式是*(*(a+i)+j)。{{ select(21) }}
  • 正确
  • 错误
  1. 指针的指针可以用于动态创建二维数组。{{ select(22) }}
  • 正确
  • 错误
  1. 对数组名使用&运算符得到的是整个数组的地址。{{ select(23) }}
  • 正确
  • 错误
  1. 指针加法运算中,p + n 和 n + p 的含义相同。{{ select(24) }}
  • 正确
  • 错误
  1. 使用指针访问数组元素一定比下标访问速度快。{{ select(25) }}
  • 正确
  • 错误