【发布时间】:2014-09-22 17:16:28
【问题描述】:
考虑以下情况:
1.
extern int *a;
int *a = new int(1); //OK
2.
extern int a[];
int a[5]; //Ok
3.
extern int (*a)[];
int (*a)[5]; //error: redefinition of 'a' with a different type: 'int (*)[5]' vs 'int (*)[]'
您能解释一下为什么第三种情况会引发编译时错误吗?与前两个有什么不同?我正在寻找对标准的相应参考。
【问题讨论】:
-
你试过
extern int (*a)[5]吗?空[]有一个技巧,有时会被视为另一个指针,因此您的代码可能会被解释为extern int (**a)。 -
只是想知道,给定声明
extern int (*a)[];,您的编译器给出的sizeof a和sizeof *a是什么?我有一种模糊的感觉,这两个表达式中至少有一个不会编译,因为它试图获取一个未完全声明的对象的大小。 -
但这正是您之前询问的:
a的类型无法完成。这是your earlier question 的引用。 -
@dyp 在第三种情况下,我有第一个和最后一个声明声明不同类型的变量。
标签: c++ arrays pointers language-lawyer