C语言内存分配和编译过程的多项选择题
在这里,我们将看到一些关于内存分配和编译过程的多项选择题。
问题 1 − 以下代码的输出是什么?
#include <stdio.h> #include <stdlib.h> int main() { union my_union { int i; float f; char c; }; union my_union* u; u = (union my_union*)malloc(sizeof(union my_union)); u->f = 20.60f; printf("%f", u->f); }
选项 −
- 垃圾值
- 20.600000
- 语法错误
- 20.6
解释
使用联合体,我们可以使用相同的内存位置来保存多种类型的数据。联合体的所有成员都使用具有最大空间的相同内存位置。这里使用浮点数,其中 20.60f = 20.600000。所以答案 B 是正确的。
问题 2 − 编译过程的正确顺序是什么?
选项 −
- 汇编器、编译器、预处理器、链接器
- 编译器、汇编器、预处理器、链接器
- 预处理器、编译器、汇编器、链接器
- 汇编器、编译器、链接器、预处理器
解释 −
选项 C 是正确的,首先它预处理代码,然后编译它,之后它创建汇编级代码或目标代码,然后进行链接。
问题 3 − 以下哪个语句是正确的?
选项 −
- 在链接期间,代码 #include 被 stdio.h 替换。
- 在预处理期间,代码 #include 被 stdio.h 替换。
- 在执行期间,代码 #include 被 stdio.h 替换。
- 在编辑期间,代码 #include 被 stdio.h 替换。
解释 −
选项 B 是正确的。首先,它创建预处理代码,在此阶段,它将 #include 语句中提到的文件中存在的代码附加到代码中,然后发送到编译器。
问题 4 − 使用 fflush() 函数的目的是什么?
选项 −
- 刷新所有流和指定流
- 仅刷新指定流
- 刷新输入输出缓冲区
- 这是一个无效的库函数
解释 −
此函数用于仅刷新输出流。它清除输出缓冲区并将输出发送到控制台。选项 A 是正确的。
问题 5 − 指出以下代码的错误?
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char* ptr; *ptr = (int*)malloc(30); strcpy(ptr, "ABC"); printf("%s", ptr); free(ptr); }
选项 −
- strcpy() 语句错误
- *ptr = (int*)malloc(30); 错误
- free(ptr) 错误
- 没有错误
解释 −
选项 B 是正确的。这里它在没有强制转换的情况下从指针创建整数。
广告