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

时间:2017-02-09 20:42:50

标签: c arrays process

我使用" funcName 4"

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

print语句打印" 4"。有道理。

然而,数组kidPID未正确初始化(声明?)。没有空间存放pid_t。

如果我改变代码来阅读

int main(int argc, char** argv) {
    int numPassedIn = atoi(argv[1]);
    printf("%d", numPassedIn);
    pid_t kidPID[4]; 
它确实提供了空间。这里发生了什么?提前谢谢!

1 个答案:

答案 0 :(得分:2)

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

因此在此声明中

pid_t kidPID[numPassedIn]; 

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

pid_t kidPID[4];