MST
星途 面试题库

面试题:C++中数组指针与指针数组的应用场景

请阐述数组指针(指向数组的指针)和指针数组(数组中元素为指针)的区别,并分别举例说明它们在实际项目中的应用场景。比如,在处理多维数据结构或者管理动态分配的对象数组方面,它们是如何发挥作用的。
30.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

数组指针(指向数组的指针)

  • 定义:数组指针是一个指针变量,它指向一个数组。其声明语法为 type (*pointer_name)[array_size],其中 type 是数组元素的类型,array_size 是数组的大小。
  • 区别于指针数组:它本质是一个指针,指向一个特定大小的数组整体。
  • 实际项目应用场景举例
    • 多维数据结构:在处理二维数组时非常有用。例如在图形处理项目中,图像可以用二维数组表示像素点信息,一个数组指针可以方便地指向整个二维数组,进行逐行处理等操作。
#include <stdio.h>

int main() {
    int matrix[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };
    int (*p)[4] = matrix;  // 数组指针,指向包含4个int元素的数组
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            printf("%d ", *(*(p + i)+j));
        }
        printf("\n");
    }
    return 0;
}

指针数组(数组中元素为指针)

  • 定义:指针数组是一个数组,数组的每个元素都是指针类型。声明语法为 type *array_name[array_size]type 是指针所指向的数据类型,array_size 是数组的大小。
  • 区别于数组指针:它本质是一个数组,数组元素是指针。
  • 实际项目应用场景举例
    • 管理动态分配的对象数组:在内存管理相关项目中,当需要动态创建多个对象并进行管理时,可使用指针数组。例如在一个游戏开发项目中,需要动态创建多个游戏角色对象,每个对象在堆上分配内存,指针数组可以存储这些对象的指针,便于统一管理。
#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int id;
    char name[20];
} Character;

int main() {
    Character *characters[3];
    for (int i = 0; i < 3; i++) {
        characters[i] = (Character *)malloc(sizeof(Character));
        characters[i]->id = i + 1;
        snprintf(characters[i]->name, sizeof(characters[i]->name), "Char%d", i + 1);
    }
    for (int i = 0; i < 3; i++) {
        printf("ID: %d, Name: %s\n", characters[i]->id, characters[i]->name);
        free(characters[i]);
    }
    return 0;
}