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 是正确的。这里它在没有强制转换的情况下从指针创建整数。

更新于: 2019年10月21日

437 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告