[牛客网]错题整理(3)

来源:互联网 发布:淘宝网商城儿童女装 编辑:程序博客网 时间:2024/06/06 09:01

错题集

 

1.下面哪一个不是动态链接库的优点?

A.共享

B.装载速度快

C.开发模式好

D.减少页面交换

答案:B

解析:

1 静态链接库的优点

 (1) 代码装载速度快,执行速度略比动态链接库快;

 (2) 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地狱等问题。

2 动态链接库的优点

 (1) 更加节省内存并减少页面交换;

 (2) DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性;

 (3) 不同编程语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数;

 (4)适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。

3 不足之处

 (1) 使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费;

 (2) 使用动态链接库的应用程序不是自完备的,它依赖的DLL模块也要存在,如果使用载入时动态链接,程序启动时发现DLL不存在,系统将终止程序并给出错误信息。而使用运行时动态链接,系统不会终止,但由于DLL中的导出函数不可用,程序会加载失败;速度比静态链接慢。当某个模块更新后,如果新模块与旧的模块不兼容,那么那些需要该模块才能运行的软件,统统撕掉。这在早期Windows中很常见。

 

2.以下程序的输出结果为()

#include <string.h>

#include <stdio.h>

 

void main()

{

    char x[] = "STRING";

    x[0] = 0;

    x[1] = '\0';

    x[2] = '0';

    printf("%d %d\n", sizeof(x), strlen(x));

}

答案:7  0

解析:0和‘\0’都是判断结束的标志

 

3.在32位机器上,下列代码中

class A

{

     int i;

     union U

     {

         char buff[13];

         int i;

     }u;

     void foo() {    }

     typedef char* (*f)(void*);

     enum{red, green, blue} color;

}a;

sizeof(a)的值是()

答案:24

解析:联合表示若干数据成员取其一,故以叠加方式分配内存,所占字节数为最大数据成员所占的字节数。 还要字节对齐,空函数 不占字节所以4+16+0+0+4

 

4.下面代码会输出什么()

int main(int argc, char **argv)

{

    int a[4] = {1, 2, 3, 4};

    int *ptr = (int *)(&a + 1);

    printf("%d", *(ptr - 1));

}

答案:4

解析:a 和 &a 是同一个地址,printf("%d", a),printf("%d", &a)结果是相同的。

但是其代表的含义不同,*(a+1)代表从a数组首地址跳跃一个int的长度,*(&a+1)表示从a数组首地址跳跃一个数组的长度,也就是指向a数组最后一个元素的下一个位置,因此*(ptr - 1)表示a数组的最后一个元素。

 

5.test.c文件中包括如下语句:

#define INT_PTR int*

typedef int*int_ptr;

INT_PTR a,b;

int_ptr c,d;

文件中定义的四个变量,哪个变量不是指针类型?

答案:b

解析:#define为宏定义指令 int*为宏体是整型指针,INT_PTR为宏名;经过预处理,进行宏替换,INT_PTR a,b;替换为int* a,b;故a是整型指针而b是整型。

typedef作用是给已存在的数据类型引入一个别名,语法 typedef 已有类型名 类型别名,所以 int_ptr是int*整型指针类型的别名。

 

6.下面有关c++ traits,说法正确的有?

A.一个traits包括了enum、typedef、模板偏特化(template partial specialization)

B.typedef定义了各个类的各自不同的类型定义

C.模板偏特化用于实现各个类的不同功能

D.当函数,类或者一些封装的通用算法中的某些部分会因为数据类型不同而导致处理或逻辑不同,traits会是一种很好的解决方案

答案:ABCD

解析:详情参考该网站:http://www.cplusplus.com/reference/type_traits/

 

 


原创粉丝点击