指针数组和 数组指针是两个完全不同的概念,它们的区别在于一个是指向数组的指针,而另一个是包含指针的数组。
指针数组
定义:指针数组是一个数组,其元素都是指针类型。这些指针可以指向任何类型的数据。
例子:`int *arr = {&a, &b, &c};` 这里,`arr` 是一个包含三个整型指针的数组,每个元素分别指向变量 `a`、`b` 和 `c` 的地址。
应用场景:指针数组常用于动态内存分配和指针传递等操作,例如存放多个字符串。
数组指针
定义:数组指针是一个指向数组的指针,它存储的是一个数组的地址。这个数组可以是一维或多维数组。
例子:`int (*ptr) = &arr;` 这里,`ptr` 是一个指向包含五个整型数据的数组的指针。
应用场景:数组指针更多用于多维数组的处理。
示例代码
```c
// 指针数组示例
int a = 10, b = 20, c = 30;
int *arr = {&a, &b, &c};
for (int i = 0; i < 3; i++) {
printf("%d\n", *arr[i]);
}
// 数组指针示例
int arr = {1, 2, 3, 4, 5};
int (*ptr) = &arr;
for (int i = 0; i < 5; i++) {
printf("%d\n", (*ptr)[i]);
}
```
优先级和解析
在C语言中,`*`、`[]` 和 `()` 的优先级分别为:
`()` 最高
`[]` 其次
`*` 最低
因此,在解析复杂类型时,需要注意运算符的优先级。例如:
`int (*p);` 表示 `p` 是一个指向包含4个整型元素的一维数组的指针。
`int *q;` 表示 `q` 是一个包含4个整型指针的数组。
总结
指针数组:一个数组,其元素都是指针。
数组指针:一个指针,指向一个数组的首地址。
希望这些解释和示例代码能帮助你更好地理解指针数组和数组指针的区别。