int *a[3]:为什么这里是指针数组,[] 的优先级高于 * ,所以这是一个数组,而 * 修饰数组,所以是指针数组,数组的元素是整型的指针。
示例:
int main() { char *str[3]; str[0] = "abc"; str[1] = "efg"; str[2] = "hij"; for (int i = 0; i < 3; ++i) { printf("%s\n", str[i]); } }
结果:
abc efg hij
数组指针
int (*a)[3]:同样的方式,首先括号的优先级最高,所以 *a 是指针,而 [] 修饰 *a ,所以是数组指针,一个指向 3 个元素的一维数组指针。
示例:
typedef int arr[3]; int main() { arr b = {1, 2, 3}; int (*a)[3] = &b; arr *c = a; for (int i = 0; i < 3; ++i) { printf("%d\n", (*a)[i]); } }
结果:
1 2 3
解析:
这里使用 typedef。我们自定义了一个数据类型,为数组数据类型。起数据类型为三个整型元素的数组。
定义数组指针也有两种方式,一个是使用我们上面自定义的数组数据类型,一个是直接定义。