我使用“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/