既然我们在 if 中将 int 的值更改为 10,为什么在子进程及其创建的子进程的第二个 fork 后,我会得到 33 ?

问题描述 投票:0回答:2

这是代码:

int main(int argc, char *argv[ ]){
    int x = 33;
    if(!fork()){
        int x = 10;
        printf("%d\n", x);
    }
    fork();
    printf("%d\n", x);
    return 0;
}

我会假设,因为原始子项的 int 值发生了变化,所以它的值是 10,并且在第二个 fork 中也是如此(fork();),因此原始子项及其子项打印 10,因此输出如下这个:33 33 10 10 10 但似乎虽然 int 的值在 if 内部发生了变化,但子进程却取回了 x 的原始值,即 33,并且在第二次 fork 后都打印了 33(所以输出是这样的: 33 33 10 33 33。为什么是吗?(我相信 与此无关)here is a photo of what i think is happening but apparently it doesnt

c if-statement variables integer fork
2个回答
0
投票

x
块内第一个
printf
中打印的
if
是用以
}
结束的局部作用域定义的。第二个
printf
使用
x
主体范围内定义的
main
,该主体仍具有初始值
33


0
投票

您在两个不同的范围内定义了两个

x
。一个位于
if
内部,当程序退出该范围时,它停止存在。

© www.soinside.com 2019 - 2024. All rights reserved.