数组指针(指向数组的指针)
- 定义:数组指针是一个指针变量,它指向一个数组。其声明语法为
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;
}