以下代碼的輸出將是什么:
#include <stdio.h>
void main()
{
int i;
for (i=0;i<2;i )
{
fork();
printf("1\n");
}
printf("2\n");
}
在講座上,教授運行代碼,輸出有 6 個 1 和 4 個 2,但我不明白我們是如何獲得這些數字的。
uj5u.com熱心網友回復:
讓我們以樹的形式“繪制”行程,并標出printf呼叫發生的位置,然后計算printf每種型別的呼叫:
父母
|
叉
^
父母 -------/ \------------ 孩子
| |
printf("1") printf("1")
| |
回圈迭代回圈迭代
| |
叉叉
^ ^
父母 --/ \----- 孫子 孩子 --/ \----- 孫子
| | | |
printf("1") printf("1") printf("1") printf("1")
| | | |
回圈結束回圈結束回圈結束回圈結束
| | | |
printf("2") printf("2") printf("2") printf("2")
| | | |
程序結束 程序結束 程序結束 程序結束
正如我們所見,有六個printf("1")電話和四個printf("2")電話。
[我沒有在printf呼叫中添加換行符,該圖僅用于計算呼叫次數。實際輸出可能會因緩沖而異,具體取決于stdout目標。]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/455298.html
