笔试题整理【1】

一、简述数组与指针的区别?

数组要么在静态存储区被创建(如全局数组),要么在桟上被创建

指针可以随时指向任意类型的内存块

(1) 修改内容上的差别

char a[] = "hello";  a[0] = 'x';

char *p = "world";  p[0] = 'x';

指针p指向字符串常量 不能修改

(2) 用运算符 sizeof 可以计算数组的字节数,而指针得到的是一个指针

变量的字节数


二、关键字 const 是什么含义,有什么作用?

含义:const 是一个修饰符,被修饰的对象或者是变量是不可修改的,

也就是 const 可读不可改,const 在谁的前面就修改谁。

C语言:

1、阻止一个变量被改变,使用 const 来修饰

2、const 可以修饰指针本身,也可以修饰指针所指向的内容

3、在对一个函数进行声明的时候,可以使用 const 对形参进行修饰,

表明它是一个输入参数在函数的内部不可写

C++:

1、const 用于定义常量,可以进行数据静态类型安全检查

2、const 修饰函数形式参数,输入参数为用户自定义类型和抽象数据类型时,

应该将"值传递"改为"const &"传递,提高效率。

3、对于类的成员函数,表明它是一个常函数,不能修饰类的成员变量

4、对于类的成员函数,有时候必须指定其返回类型时 const ,这样返回值不能被直接修改


三、请说出 const 与 #define 相比,有何优点?

1、const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查

而后者只进行字符串替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误。

2、有些集成化的调式工具可以对 const 常量进行调试,但是不能对宏常量进行调试


四、什么是预编译,何时需要预编译?

预编译又称为预处理,是做些代码文本的替换工作,处理以 # 开头的指令,比如拷贝 #include 

包含的文件代码,#define 宏定义的替换,条件编译,就是为编译做得预备工作的阶段

1、总是使用不经常改动的大型代码体

2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项


五、在C++程序中调用被C编译器编译后的函数,为什么要加 extern"C"?

C++语言支持函数重载,C语言支持函数重载。函数被C++编译后在库中的名字与C语言的不同。

假设某个C函数的声明如下:void foo(int x, int y);该函数被C编译器编译后在库中的名字为_foo,

而C++编译器会产生像_foo_int_int之类的名字用来支持函数重载和类型安全连接,由于编译后

名字不同,C++程序不能调用C函数,C++提供了一个C连接交换指定符号 extern"C"来解决这个问题。




猜你喜欢

转载自blog.csdn.net/ljf_djcrs/article/details/79376507