gpt4 book ai didi

c++ - 通过读取用户的值创建一个包含 10 个整数的输入数组

转载 作者:搜寻专家 更新时间:2023-10-30 23:53:00 24 4
gpt4 key购买 nike

我正在尝试以下代码:

int main() {
int x[10] ;
int a[] = {1,2,3,4,5} ;
int n ;
int b[n] ;
//int c[] ; gives compilation error

cout<<sizeof(x)<<endl ; //prints 40
cout<<sizeof(a)<<endl ; //prints 20
cout<<sizeof(b)<<endl ; //prints 4
}

现在我的问题是当我定义b 时到底发生了什么。我曾尝试阅读类似问题的答案,但没有得到满意的答复。因为数组是静态创建的,所以在声明它们时必须给出大小。那么为什么 b 的声明有效。 sizeof(b) 是否表明这只是作为一个 int 指针

最佳答案

what exactly happens

int n ;
int b[n] ;

使用未初始化整数(窄字符类型除外)的值具有未定义的行为(UB)。此外,由于 n 不是编译时常量,而是用作数组的大小,根据 C++ 标准,程序是病式的(这意味着允许编译器拒绝编译程序,并且至少需要显示诊断消息)。

但是,如果您的编译器支持可变长度数组(VLA,一种语言扩展),那么究竟会发生什么取决于编译器如何实现 VLA(当然还有,它是如何处理你引入的 UB 的)。

Then why is declaration of b valid.

事实上,它在标准 C++ 中无效

Does the sizeof(b) indicate that this just treated as a int pointer

没有。由于行为未定义,因此输出没有任何指示。即使 int 指针的大小恰好在您的系统上为 4,输出也只是碰巧相同。

关于c++ - 通过读取用户的值创建一个包含 10 个整数的输入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42532105/

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