在C语言中,“指针数组”和“数组指针”这两个概念虽然听起来相似,但实际上它们是完全不同的。下面我会详细解释这两种类型的区别,并给出相应的示例代码。
指针数组指针数组是一个数组,它的每一个元素都是一个指针。通常用于存储多个指向不同类型数据的指针。例如,一个指针数组可以存储多个指向字符串的指针。
示例代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
char *stringArray[3]; // 指针数组定义
stringArray[0] = "Hello";
stringArray[1] = "World";
stringArray[2] = "C Language";
for (int i = 0; i < 3; i++) {
printf("%s\n", stringArray[i]); // 输出字符串
}
return 0;
}
数组指针数组指针是一个指针,它指向一个数组的起始位置。这个指针可以被用来访问整个数组,就像数组名一样,但提供了更多的灵活性,因为它可以被重新赋值指向其他的数组。
示例代码:
#include <stdio.h>
int main() {
int array[3] = {1, 2, 3}; // 普通的整数数组
int (*arrayPtr)[3]; // 数组指针定义
arrayPtr = &array; // 数组指针指向数组
for (int i = 0; i < 3; i++) {
printf("%d\n", (*arrayPtr)[i]); // 输出数组元素
}
return 0;
}
区别总结:1. 类型定义:
- 指针数组 的定义看起来像 `type *arrayName[size];`,其中 `type` 是指针所指向的类型,`size` 是数组的大小。
- 数组指针 的定义看起来像 `type (*pointerName)[size];`,这里的 `pointerName` 是指向数组的指针。
2. 用途:
- 指针数组 常用于存储多个同类型数据的指针,如存储多个字符串的指针。
- 数组指针 主要用于指向某个具体的数组,使得可以使用指针来访问和修改数组的内容。
3. 操作方式:
- 对于 指针数组,`arrayName[i]` 会得到第 `i` 个元素的指针。
- 对于 数组指针,`*arrayPtr` 会得到数组的首地址,`(*arrayPtr)[i]` 或 `arrayPtr[i]` 会得到数组的第 `i` 个元素。