腾讯面试题--程序一共输出多少个“-”

来源:互联网 发布:老男孩linux视频云盘 编辑:程序博客网 时间:2024/04/29 22:35

题目详情:

请判断下列程序一共输出多少个“-”;

int main(void) { int i; for(i=0; i<2; i++){ fork(); printf("-"); } return 0; }


题目分析:

fork()出的子进程会复制父进程的变量值,缓存信息等

1、当i=0时,父进程A创建出一个子进程A1,A进程的输出缓冲区会增加一个“-”,A1子进程的输出缓冲区会增加一个“-”;

2、当i=1时,父进程A又会创建另一个子进程A2,同样会复制A的变量值与缓冲区;A1子进程会创建一个自己的子进程A3,同样会复制A1的变量值与缓冲区;

3、因此在A3子进程返回时,A3的输出缓冲区中有两个“-”,会输出2个“-”,A1返回时A1的输出缓冲区中有两个“-”也会输出2个“-”,A2返回时A2的输出缓冲区中有两个“-”,会输,2个“-”;A返回时A的输出缓冲区中有两个“-”,会输,2个“-”;

所以该程序输出为:

8个“-”  = A(2个“-”)+A1(2个“-”)+A2(2个“-”)+A3(2个“-”)

同时如果上述代码改变成:

int main(void) { int i; for(i=0; i<2; i++){ fork(); printf("-\n"); } return 0; }



那么在A创建A1时不改变,而当A创建A2与A1创建A3时,A2与A3复制A与A1的输出缓冲区时,缓冲区为空。因为\n有刷新缓冲区的作用。

因此这时候此程序的输出应该为:

6个“-”:A(2个)+A1(2个)+A2(1个)+A3(1个)

阅读全文
2 3
原创粉丝点击