C/C++ 常见面试题
1.指针和引用有什么分别;如果传引用比传指针安全,为什么?如果我使用常量指针难道不行吗?
(1) 引用在创建的同时必须初始化,即引用到一个有效的对象;而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值.
(2) 不存在NULL引用,引用必须与合法的存储单元关联;而指针则可以是NULL.
(3) 引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用;而指针在任何时候都可以改变为指向另一个对象.
给引用赋值并不是改变它和原始对象的绑定关系.
(4) 引用的创建和销毁并不会调用类的拷贝构造函数
(5) 语言层面,引用的用法和对象一样;在二进制层面,引用一般都是通过指针来实现的,只不过编译器帮我们完成了转换.
不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,显得很安全。
const 指针仍然存在空指针,并且有可能产生野指针.
总的来说:引用既具有指针的效率,又具有变量使用的方便性和直观性.
2.构造函数可否是虚汗数,为什么?析构函数呢,可否是纯虚的呢?
构造函数不能为虚函数,要构造一个对象,必须清楚地知道要构造什么,否则无法构造一个对象。
析构函数可以为纯虚函数。
3.为什么要引入抽象基类和纯虚函数?
主要目的是为了实现一种接口的效果。
4. 结构与联合有和区别?
(1). 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地址空间),
而结构的所有成员都存在(不同成员的存放地址不同)。
(2). 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。
5. #include<file.h> 与 #include "file.h"的区别?
答: 前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h, 如果后者没有找到对应的文件,就按前者的路径去寻找。
6. 面向对象的三个基本特征,并简单叙述之?
(1). 封装:将客观事物抽象成类,每个类对自身的数据和方法实
相关文档:
6.1 编写一个程序,创建一个具有26个元素的数组,并在其中存储26个小写字母,并让该程序显示该数组的内容.
#include <stdio.h>
int main(void)
{
char a[26] = {'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l',
'm', 'n', 'o', 'p ......
Part I 如何上路
1. vi, vim是编译器么?
vi means visual editor,是软件世界第一个全屏幕编辑器,最初的作者是现在Sun microsystem的Bill Joy。
vim means Vi IMproved,可以看作是增强的vi。
很不幸,他们都不是编译器,如果你已经写好了first.c,那么不能指望vi们将你的源代码变成执行程序。
2. gcc, ......
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
int main()
{
char a = 'a';
......
#include <stdio.h>
long long mod(long long a,long long b)
{
return (a % b + b) % b;
}
struct triple
{
long long d,x,y;
};
long long Euclid(long long a,long long b)
{
if(b == 0)
return a;
else
retu ......