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
究竟发生了什么
Run Code Online (Sandbox Code Playgroud)int n ; int b[n] ;
使用未初始化的整数值(窄字符类型除外)具有未定义的行为(UB).此外,由于n不是编译时常量,而是用作数组的大小,程序根据C++标准是不正确的(这意味着允许编译器拒绝编译程序,并且需要至少显示诊断信息).
但是,如果您的编译器支持可变长度数组(VLA,语言扩展),那么究竟发生了什么取决于编译器如何实现VLA(当然,它如何处理您引入的UB).
那为什么声明
b有效.
它其实没有标准C++有效.
是否
sizeof(b)表示这只是作为int指针处理
不会.由于行为未定义,输出不显示任何内容.即使int指针的大小恰好在您的系统上为4,输出也恰好相同.
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |