第7章 习题
来源:互联网 发布:linux .sh 里面的函数 编辑:程序博客网 时间:2024/06/05 09:49
习题
7.1 在intel x86系统上,使用linux,如果执行一个输出 “hello, world”的程序但不调用exit 或 return,则程序的返回代码为13(用shell检查),解释其原因。
“hello, world\n ” 共13个字符,而printf的返回值是输出的字符个数,这个返回值是存储在主函数的堆栈中的。当主函数的exit code处于未定义状态时,则其exit code由堆栈和寄存器决定。
7.2 图7-3 中的printf函数的结果何时才被真正输出
当进程与终端进行I/O时,标准输出使用行缓冲,行缓冲区遇到回车符才输出。
7.3 是否有办法不使用 参数传递 全局变量 这两种方法,将main中的参数argc argv传递给它所调用的函数。
将参数设置为环境变量。
7.4 在有些UNIX系统实现中执行时访问不到其数据段的0单元,这是一种有意的安排,为什么?
对空指针解引用dereference时,可以利用这种方式处理。
7.5 用C语言的typedef 为终止处理程序定义一个新的数据类型Exitfunc,使用该类型修改atexit的原型。
typedef int (*Exitfunc) (void (*func) (void) )
7.6 如果用calloc分配一个long型的数组,数组的初始值是否为0?如果用calloc分配一个指针数组,数组的初始值是否为空指针?
7.7 在7.6节结尾处size命令的输出结果中,为什么没有给出堆和栈的大小
7.8 为什么7.7节中两个文件的大小(879 443 和 8378)不等于它们各自文本和数据大小的和?
因为.out文件包含的不仅仅是数据和文本,还包括很多调试信息,symbol,section等。
7.9 为什么7.7节中对于一个简单的程序,使用共享库以后其可执行文件的大小变化如此巨大?
使用静态库时,链接器将二进制的库文件复制到原目标文件中。
而使用共享库时只是将函数调用表拷贝到原目标文件中。
7.10 在7.10节中我们已经说明为什么不能将一个指针返回给一个自动变量,下面的程序是否正确?
intf1(int val){int num = 0;int *ptr = #if (val == 0) {int val;val = 5;ptr = &val;}return(*ptr + 1);}
不正确,val的作用域位于if语句内,当if语句执行完成后,val就被释放,而ptr依然执行这个
- 第7章 习题
- 第7章课后习题4
- 算法导论 第7章 课后习题
- Accelerated C++ 习题解答 第7章
- 《Python核心编程》第7章 习题
- 《Python核心编程》第7章 习题
- 《Python核心编程》第7章 习题
- Java编程思想第7章习题
- 第8章习题
- c++第3章习题
- 第16章习题2
- 【第2章 习题3】
- 【第2章 习题4】
- 【第2章 习题5】
- 【第2章 习题6】
- 第4章 子程序习题
- 第3章习题3
- 《python第8章习题》
- 在myeclipse创建一个java的类
- 动态规划-392. Is Subsequence
- 【Java学习3.7.1】算术运算符
- ACM(首字母变大写)
- 位运算
- 第7章 习题
- 加载图片防止错位需注意
- seventh玩游戏 dp
- xshell 连接KALI注意事项
- JavaScript里类的相关知识
- 后缀数组和高度数组 模板及应用
- ROS下orb-slam2 单目 (二)
- Factorization Machines 学习笔记(二)模型方程(转)
- CSS(九) 设置表格样式