c - 非常奇怪的数组声明问题 - C

标签 c arrays process

我使用“funcName 4”调用此函数

int main(int argc, char** argv) {
    int numPassedIn = atoi(argv[1]);
    printf("%d", numPassedIn);
    pid_t kidPID[numPassedIn]; 

打印语句打印“4”。有道理。

但是,数组kidPID 未正确初始化(声明?)。没有空间可以存储 pid_t。

如果我改变代码来读取

int main(int argc, char** argv) {
    int numPassedIn = atoi(argv[1]);
    printf("%d", numPassedIn);
    pid_t kidPID[4]; 

它确实提供了空间。这里发生了什么?提前致谢!

最佳答案

当数组中的元素数量在运行时确定时,C 允许声明可变长度数组 (VLA)。

因此在此声明中

pid_t kidPID[numPassedIn]; 

声明了一个可变长度数组,其元素数量等于变量numPassedIn中存储的值。如果变量numPassedIn的值等于4,那么这个声明实际上(有一些限制)等价于声明

pid_t kidPID[4]; 

关于c - 非常奇怪的数组声明问题 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42146488/

相关文章:

c++ - Lua C API 内存泄漏? (valgrind)

javascript - 我的递归函数哪里出错了?

javascript - 使用 Underscore 更改数组中所有对象的值

linux - 在 Golang 中,如何使用 SIGTERM 而不是 SIGKILL 终止 os.exec.Cmd 进程?

python 多处理问题

c# - Xamarin 安卓 : Get ALL processes located in memory

c - 释放指针的算术

c - 如何在 C 中获取嵌套结构成员的偏移量?

c - 如何在 STM32 上启动和停止定时器?

c - 将数组分配给指针混淆