通过读取用户的值创建10个整数的输入数组

use*_*758 2 c++ arrays initialization sizeof

我正在尝试以下代码:

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
}
Run Code Online (Sandbox Code Playgroud)

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

eer*_*ika 5

究竟发生了什么

int n ;
int b[n] ;
Run Code Online (Sandbox Code Playgroud)

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

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

那为什么声明b有效.

它其实没有标准C++有效.

是否sizeof(b)表示这只是作为int指针处理

不会.由于行为未定义,输出不显示任何内容.即使int指针的大小恰好在您的系统上为4,输出也恰好相同.