文章目录
- 字符常量
- '\0' 与 逻辑假的关系
- 不同类型变量所占空间大小
- 运行多个 fork
- 容易造成缓冲区溢出的字符串操作函数
- 函数原型格式
- 指针变量的关系运算,空指针访问存储单元
- BSS 段
- 二维数组初始化
字符常量
‘a’ 是一个字符常量,占用 1 个字节空间。
‘\0’ 与 逻辑假的关系
‘\0’ 是一个字符,它的值和整数 0 相等,只是占用空间大小不同。
不同类型变量所占空间大小
两点需要注意:
- 32位机器 unsigned long 所占用空间是 4 字节
- 选项中的数据是 16 进制的,10 进制的 20 对应的 16 进制为 14。
运行多个 fork
最好不要心算,用草稿推理比较稳妥。
第一次运行 fork(),父进程和子进程各运行一次 printf(),打印了两次 “hello",第二次运行 fork(),之前的两个进程各再打印两次 ”hello",一共打印了 2 + 4 = 6 次。
容易造成缓冲区溢出的字符串操作函数
strcpy,strcat,sprintf 容易造成缓冲区溢出,它们的优化版本则更安全(strncpy,strncat,snprintf),优化版本可以限制操作的字节数,从而避免缓冲区溢出。
下面是题目讨论里某网友的评论:
函数原型格式
A 错在参数中间使用了 ;
。。。
D 选项是对的 —— 函数原型:指明函数的名字,返回的类型,有几个参数,这几个参数是什么类型,不需要函数体,也不需要形式参数的名字,其中用分号作为原型的结束符。
指针变量的关系运算,空指针访问存储单元
A:不同类型指针无法直接指向
B:空指针不能反问存储单元
C:p = 0 等价于 p = NULL 和 p = ‘\0’
D:指针变量指向的是地址,地址可以用关系运算符比较
BSS 段
bss:未初始化全局变量
data: 已初始化全局变量
text: 代码段
heap: 堆
stack: 栈
二维数组初始化
个人感觉 B 和 D 都没问题
多维数组只能省略第一维的大小,所以 A 错误。
C 选项第一维溢出了
题目的评论里有很多人说 D 选项没问题。