gpt4 book ai didi

c - [c]中变长数组(VLA)的初始值从哪里来?

转载 作者:太空宇宙 更新时间:2023-11-04 05:24:29 25 4
gpt4 key购买 nike

示例 C 代码:

#include <stdio.h>
int main (int argc, char** args) {

int k = 8;
int sendbuffer[k]; // VLA

for (int n = 0; n < k; n++) {
printf("sendbuffer[%i]: %i \n", n, sendbuffer[n]);
}

return 0;
}

示例输出:

sendbuffer[0]: 1 
sendbuffer[1]: 0
sendbuffer[2]: 1583871280
sendbuffer[3]: 32767
sendbuffer[4]: 22544384
sendbuffer[5]: 1
sendbuffer[6]: 1713234504
sendbuffer[7]: 32767

sendbuffer[] 中的数字从何而来? 为什么再次运行代码时只有 sendbuffer[2,4,6] 发生变化?

我在 OSX El Capitan 上使用 clang 编译器(使用 gcc example.c 编译)
Apple LLVM 版本 7.3.0 (clang-703.0.31)
目标:x86_64-apple-darwin15.4.0
线程模型:posix

如果其他编译器/操作系统的行为不同,我也想听听这些案例。

最佳答案

这不仅适用于 VLA;以上行为适用于任何变量声明。如果声明一个变量,例如

int a;

这会在堆栈上分配 sizeof(int) 个字节,无论系统选择哪个地址。那里的内存未初始化;它是当时发生的任何事情。由程序员来初始化内存。

关于c - [c]中变长数组(VLA)的初始值从哪里来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37104282/

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