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; }