当我运行以下程序时,输出为5.
为什么5?为什么不8?
void *doit(void *vargp) {
int i = 3;
int *ptr = (int*)vargp;
(*ptr)++;
}
int main() {
int i = 0;
pthread_t tid;
pthread_create(&tid, NULL, doit, (void*)&i);
pthread_join(tid,NULL);
i = i + 4;
printf("%d",i);
}
答案 0 :(得分:6)
在doit中,i的值在语句
处从0增加到1(*ptr)++
线程完成后,将其递增4
i = i + 4;
所以值为5
答案 1 :(得分:2)
在doit()
中,您将i
递增1(通过referance传递的主函数),并在线程加入后向其添加4。
要获得8,您可能已在doit().