1、指向数组的指针(Pointer to an Array)
指向数组的指针是指向整个数组的指针,而不是指向数组中的单个元素。它指向的是数组的第一个元素,并且它的类型是指向该数组的指针。
#include <stdio.h>
int main() {
int arr[3] = {1, 2, 3};
int (*ptr)[3] = &arr; // 指向一个包含3个整数的数组的指针
printf("%d\n", (*ptr)[0]); // 输出 1
printf("%d\n", (*ptr)[1]); // 输出 2
printf("%d\n", (*ptr)[2]); // 输出 3
return 0;
}
2、数组的指针(Array of Pointers)
数组的指针是一个数组,其中每个元素是一个指向某些数据类型的指针。可以将它视为指针的集合。
#include <stdio.h>
int main() {
int *arr[3]; // 一个包含 3 个指向整数的指针的数组
int a = 10, b = 20, c = 30;
arr[0] = &a;
arr[1] = &b;
arr[2] = &c;
// 输出每个指针所指向的值
printf("%d\n", *arr[0]); // 输出 10
printf("%d\n", *arr[1]); // 输出 20
printf("%d\n", *arr[2]); // 输出 30
return 0;
}
3、区别总结
指向数组的指针 是指向整个数组的指针。int (*ptr)[3]
,ptr
是指向包含 3 个整数的数组的指针,解引用后获取的是整个数组,可以使用数组下标来访问每个元素。访问方式,(*ptr)[0]
,(*ptr)[1]
,(*ptr)[2]
。
数组的指针 是一个数组,每个元素都是指向特定数据类型的指针。int *arr[3]
,arr
是一个数组,包含 3 个指向整数的指针。每个元素是一个指针,指向整数值。访问方式,*arr[0]
,*arr[1]
,*arr[2]
。
#include <stdio.h>
int main() {
// 指向数组的指针
int arr[5] = {1, 2, 3, 4, 5};
int (*p)[5] = &arr; // p 是指向具有 5 个元素的数组的指针
printf("指向数组的指针: p[0][2] = %d\n", (*p)[2]); // 通过指向数组的指针访问元素
// 数组元素的指针
int *q = arr; // q 是指向数组第一个元素的指针
printf("数组元素的指针: q[2] = %d\n", q[2]); // 通过指向元素的指针访问元素
return 0;
}