让我们拥有以下内容的文件:
file1.cpp
: 双数组[100];
file2.cpp
(file1.cpp
的客户端):
/// What the difference between this:
extern double* array;
/// and this?
extern double array[];
如果我使用以第一种方式声明的数组,我会收到段错误。如果是第二个,它工作正常。这让我感到困惑,因为在常规的 C++ 程序中,我可以轻松地执行以下操作,并且这些对象将是相等的:
double array[100];
double* same_array = array;
/// array[0] is equal to same_array[0] here
/// But why they are not equal in the example with extern?
最佳答案
区别在于first是指向double类型的指针
第二个是 double 组。
这里要注意的重要一点是:
数组不是指针!
只要数组类型不合法但指针类型合法,数组类型(可以是数组名称)的表达式将转换为指针。
double array[100];
double* same_array = array;
按照提到的规则,在上面的数组名称中衰减为指向其第一个元素的指针。
为什么你的程序会崩溃?
数组声明创建一个数组,该数组根据存储类(声明位置)占用一些内存。
而指针只是创建一个指向某个地址的指针。您将明确需要使其指向某个有效对象才能使用它。
这应该是一本好书:
<强> How do I use arrays in C++?
关于c++ - C++ 中的这些 extern 声明有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8552453/