📜  关于内存分配和编译过程的 MCQ

📅  最后修改于: 2021-09-25 04:01:09             🧑  作者: Mango

1.以下代码的输出是什么?

#include 
#include 
  
int main()
{
    union test {
        int i;
        float f;
        char c;
    };
    union test* t;
    t = (union test*)malloc(sizeof(union test));
    t->f = 20.60f;
    printf("%f", t->f);
    return 0;
}

(a) 垃圾值
(b) 20.600000
(c) 语法错误
(d) 20.60

解释 :
联合提供了一种使用相同内存位置的有效方式。 Union 的所有成员都使用具有最大空间的相同内存位置。
这里,使用了float f ,它具有

f = 20.60f = 20.600000

.所以,选项(b)是正确的。

2.编译过程的正确顺序是什么?
(a) 汇编器→编译器→预处理器→链接
(b) Compiler → Assenbler → Preprocessor → Linking
(c) 预处理器→编译器→汇编器→链接
(d) 汇编器→编译器→链接→预处理器

解释 :
选项(c)是正确的。

3.在预处理期间,代码#include被文件stdio.h的内容替换。哪个是真的?
(a) 在链接期间, #include替换为stdio.h
(b) 是
(c) 在执行期间代码#include替换为stdio.h
(d) 在编辑代码时#include替换为stdio.h

解释 :
预处理通过将预处理指令#include替换为文件stdio.h的内容来扩大和增强 C 编程语言。
选项(b)。

4.为什么要使用fflush()库函数?
(a) 刷新所有流和指定流
(b) 只刷新指定的流
(c) 刷新输入/输出缓冲区
(d) 无效的库函数

解释 :
如定义在 C 中使用 fflush(stdin) : fflush()通常仅用于输出流。它的目的是清除(或刷新)输出缓冲区并将缓冲的数据移动到控制台(在 stdout 的情况下)或磁盘(在文件输出流的情况下)。
选项(a)是正确的。

5.指出错误->

#include
#include
#include
int main()
{
    char* ptr;
    *ptr = (int*)malloc(30);
    strcpy(ptr, "RAM");
    printf("%s", ptr);
    free(ptr);
    return 0;
}

(a) 错误:在strcpy()语句中。
(b) 错误:在*ptr = (int *) malloc(30)
(c) 错误:在free(ptr)
(d) 没有错误

解释 :
赋值从指针生成整数而无需强制转换。选项(b)是正确的。

6.为什么使用calloc()函数?
(a) 分配指定的字节数
(b) 分配指定数量的字节并将它们初始化为零
(c) 增加或减少指定内存块的大小并在需要时重新分配它
(d) 调用指定的内存块来执行。

解释 :

  • malloc() :分配指定的字节数。
  • realloc() :增加或减少指定内存块的大小。如果需要,重新分配它。
  • calloc() :分配指定数量的字节并将它们初始化为零。
  • free() :将指定的内存块释放回系统。

所以,选项(b)是正确的。

想要从精选的视频和练习题中学习,请查看C 基础到高级C 基础课程