0%

int *p[]和int (*p)[]区别

按字符结合顺序讲,[]的优先级大于*

所以int *p[]等于int *(p[])

(int *)(p[]) 就是一个指针数组,就是一个数组,里面存放的是指针

int (*p)[]表示p是一个指针,指向一个有n个int值的数组

引用一下runoob的话

指针数组

int *a[3]:为什么这里是指针数组,[] 的优先级高于 * ,所以这是一个数组,而 * 修饰数组,所以是指针数组,数组的元素是整型的指针。

示例:

1
2
3
4
5
6
7
8
9
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]);
}
}

结果:

1
2
3
abc 
efg
hij

数组指针

int (*a)[3]:同样的方式,首先括号的优先级最高,所以 *a 是指针,而 [] 修饰 *a ,所以是数组指针,一个指向 3 个元素的一维数组指针。

示例:

1
2
3
4
5
6
7
8
9
10
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
1 
2
3

突然找到一篇比较好理解的文章,保存在这里

https://www.cnblogs.com/llanse-xianchengduo/p/10960431.html

欢迎关注我的其它发布渠道