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

📅  最后修改于: 2021-07-02 16:54:51             🧑  作者: 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)编译器→Assenbler→预处理器→链接
(c)预处理器→编译器→汇编器→链接
(d)汇编器→编译器→链接→预处理器

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

3.在预处理期间,代码#include被替换为文件stdio.h的内容。哪个是对的?
(a)在链接过程中,代码#includestdio.h替换
(b)是
(c)在执行期间,代码#includestdio.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)错误:in *ptr = (int *) malloc(30) ;
(c)错误:在free(ptr)
(d)没有错误

解释 :
赋值从指针进行整数运算,而不进行强制转换。选项(b)是正确的。

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

解释 :

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

因此,选项(b)是正确的。

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。