MST

星途 面试题库

面试题:C++ 中二维数组与指针的转换

假设有一个二维数组`int arr[3][4];`,请说明如何通过指针访问这个二维数组的每一个元素,并且编写一个函数,接收这个二维数组的指针,实现对数组元素的遍历并打印。
40.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 通过指针访问二维数组元素
    • 对于二维数组int arr[3][4];arr本身就是一个指向包含4个int类型元素的数组的指针。
    • 可以使用指针运算来访问每个元素。例如,*(arr + i) + j指向arr[i][j]的地址,*(*(arr + i) + j)就是arr[i][j]的值。
  2. 编写遍历并打印的函数
#include <stdio.h>

void printArray(int (*arr)[4], int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", *(*(arr + i) + j));
        }
        printf("\n");
    }
}

你可以这样调用这个函数:

int main() {
    int arr[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };
    printArray(arr, 3, 4);
    return 0;
}

在上述代码中:

  • printArray函数接收一个指向包含4个int类型元素的数组的指针arr,以及数组的行数rows和列数cols
  • 使用两层循环遍历二维数组,并通过指针运算*(*(arr + i) + j)访问并打印每个元素。
  • main函数中,定义并初始化二维数组arr,然后调用printArray函数打印数组内容。