c++ - 为什么C++中没有定义n的sizeof(array A[n])是固定的?

标签 c++ sizeof variable-length-array gcc-extensions

当我尝试查找 sizeof(A) 时,其中 A 的类型为 int,大小为“n”,n 是一个未定义的 int。我得到的输出为 496,当我给 n 一个值然后检查它时,sizeof(A) 给了我相同的值 496。 我知道数组是静态数据类型,因此无论“n”如何,它都会有内存,但有人能解释一下值 496 来自哪里吗?

int main()
{
    int n;
    int A[n];
    
    cout<<sizeof(A)<<"\n";
    
    cin>>n;
    
    cout<<sizeof(A);
    return 0;
}

最佳答案

where A is of type int with size as 'n'

int n;
int A[n];

A 的类型不是“大小为 'n' 的 int”。 A 的类型是 int[n],它是 n 个整数的数组。然而,由于 n 不是编译时常数,因此该程序格式错误。如果我们不考虑格式错误,n 的值是不确定的。读取不确定的值会导致未定义的行为。

anyone explain me where the value 496 came from?

它来自未定义的行为。您可以通过阅读生成该结果的编译程序的汇编来找到更多详细信息。

关于c++ - 为什么C++中没有定义n的sizeof(array A[n])是固定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68992461/

相关文章:

c - 带有可变长度数组的奇怪输出?

c++ - 从字符串创建 vector 的程序中的段错误

c++ - boost 元组的排序双端队列

c - 相同结构的不同尺寸,不同类型的排序

"sizeof(arr[0])"会导致未定义的行为吗?

c - 初始化可变长度数组

c++ - C++局部静态变量初始化在VS2015中是线程安全的吗

c++ - 关于C++ rest sdk和同步调用

c - 使用 sizeof () 在 ANSI C 中查找函数类型长度

c++ - 使用非常量函数参数初始化数组