int p6; 和int p6;两种写法等价吗?都是代表一个6个元素的数组吗?每个元素是一个指针吗?为什么举例验证说明一定要验证
这两种写法不等价,虽然都是代表一个6个元素的数组,但是每个元素的类型不同。
int *(p[6]); 表示 p 是一个包含 6 个指针的数组,每个指针指向一个 int 类型的变量。可以这样来理解:
int a, b, c, d, e, f;
int *p[6] = {&a, &b, &c, &d, &e, &f};
int *(p)[6]); 表示 p 是一个指向包含 6 个 int 指针的数组的指针。可以这样来理解:
int a, b, c, d, e, f;
int *(*p)[6] = &((int* [6]){&a, &b, &c, &d, &e, &f});
其中,(int* [6]){&a, &b, &c, &d, &e, &f} 表示一个包含 6 个 int 指针的数组,用 & 取它的地址得到一个指向这个数组的指针。
也就是说,第一种写法的每个元素是一个指向 int 类型变量的指针,而第二种写法的每个元素是一个 int 类型的指针。
下面的代码可以验证这一点:
#include <stdio.h>
int main() {
int a, b, c, d, e, f;
// 第一种写法
int *(p[6]) = {&a, &b, &c, &d, &e, &f};
for (int i = 0; i < 6; i++) {
printf("%d ", *p[i]);
}
printf("\n");
// 第二种写法
int *(*q)[6] = &((int* [6]){&a, &b, &c, &d, &e, &f});
for (int i = 0; i < 6; i++) {
printf("%d ", *(*q)[i]);
}
printf("\n");
return 0;
}
输出为:
0 0 0 0 0 0
0 0 0 0 0 0
可以看到,两种写法得到的结果不同,验证了它们的不等价性
原文地址: https://www.cveoy.top/t/topic/fFuY 著作权归作者所有。请勿转载和采集!