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 是正确的。这里它在没有强制转换的情况下从指针创建整数。
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C编程
C++
C#
MongoDB
MySQL
Javascript
PHP