gpt4 book ai didi

c++ - C++ 中的这些 extern 声明有什么区别?

转载 作者:行者123 更新时间:2023-11-27 23:27:03 25 4
gpt4 key购买 nike

让我们拥有以下内容的文件:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com