1:指针(*)、引用(&)、解引用(*)、取地址(&)、的概念和区别
概念:
指针指向一块内存,指针保存的是内存的地址;引用是变量的别名,本质是引用该变量的地址。
解引用是取指针指向的地址的内容,取地址是获得变量在内存中的地址。
区别:
1引用使用是无需解引用,指针需解引用。
(2)引用不能为空,指针可以为空。
(3)引用在定义时被初始化一次,之后不可变;指针指向的值和本身的值是可变的,也就是说指针只是一块地址,地址里的东西可变。
(4)程序会给指针变量分配内存区域,而引用不需要分配内存区域。
2:memset、memcpy和strcpy的区别
memcpy是内存拷贝函数,可以拷贝任何数据类型的对象,例如memcpy(b, a, sizeof(b))。
strcpy只能拷贝字符串,遇到’0′结束拷贝。
memset用来对一段内存空间全部设置为某个字符,例如:char a[100];memset(a, '', sizeof(a))。
3:struct和class的区别,struct与union的区别
struct和class都是声明类的关键字
区别是:
4:指针在16位机、32位机、64位机分别占用多少个字节
16位机--2字节、32位机--4字节、64位机--8字节。
5:如何引用一个已经定义过的全局变量?区别是什么
如果在同一个文件中,直接引用即可。
如果不在同一个文件,有两种方式:
(1)直接引用头文件就可以使用了。
(2)用extern关键字重新声明一下。
6:全局变量可不可以定义在可被多个.C文件包含的头文件中?变量的声明一般放在头文件中,那么变的定义可以放在头文件中吗?在实际的编程中一般很少在头文件中定义全局变量,因为多次引用可能重定义。7:do……while和while……do有什么区别?
do...while先执行循环再判断条件,while...do先判断条件再执行循环。
8:对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?
C用宏定义,C++用inline。9:main 函数执行以前,会执行什么代码?
全局对象的构造函数会在main 函数之前执行,比如int a;初始化为0。
10:main 主函数执行完毕后,会执行什么代码?
可以,使用on_exit 注册的函数会在代码执行完毕后执行:
void main( void )
{
String str(“zhanglin”);
on_exit( fn1 );
on_exit( fn2 );
on_exit( fn3 );
on_exit( fn4 );
printf( “This is executed first.” );
}
int fn1()
{
printf( “next.” );
return 0;
}
11:局部变量能否和全局变量重名?
可以,但是局部会屏蔽全局。要用全局变量,需要使用域作用符“::”。
12:描述内存分配方式以及它们的区别?
1.从静态存储区域分配。该存储区域在程序编译的时候就已经分配好了,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。
2. 在栈上创建。在执行函数时,函数的局部变量存储在该区域,函数执行结束时会释放该存储空间。栈内存分配运算内置于处理器的指令集。
3. 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意多少的内存,程序员自己负责在何时用free 或delete 释放内存。 动态内存的生存期由程序员决定,使用非常灵活。
13:类的成员函数重载、覆盖和隐藏的概念和区别?
14:static关键字?
15:const与#define的概念和优缺点?
const用来定义常量、修饰函数返回值,可以避免被修改,提高程序的健壮性。
define是宏定义,在编译的时候会进行替换,这样做的话可以避免没有意义的数字或字符串,便于程序的阅读。
区别:
1.const定义的数据有数据类型,而宏常量没有数据类型。编译器可以对const常量进行类型检查。而对宏定义只进行字符替换,所以字符替换时可能出错。
例子:
写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
#define MIN(A,B) ((A) <= (B) (A) : (B))
least = MIN(a, b);
下面的关键字const是什么含意:
const int a;//a是一个常整型数
int const a;//a是一个常整型数
const int *a;//a是一个指向常整型数的指针
int * const a;//a是一个指向整型数的常指针
int const * a const;//a是一个指向常整型数的常指针
static关键字的作用:
(1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上 次的值;
(2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;
(4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。
const关键字的作用:
(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;
(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;
(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;
(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;
(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。例如:
16:堆栈溢出的原因?
没有回收垃圾资源
栈溢出:
例如局部变量数组越界访问或者函数内局部变量使用过多,超出了操作系统为该进程分配的栈的大小。
堆溢出:
所以溢出的原因可能是程序员申请了资源但是忘记释放了。
17:刷新缓冲区方式?
换行刷新缓冲区:printf(“”);程序结束刷新缓冲区:return 0;18:类和对象的两个基本概念?类的作用或概念:用来描述一组具有相似属性的东西的对象的一种数据结构。类中有数据成员的声明和定义,有成员函数的实现代码。对象就是类的实例化。计算机中想要使用类,只能进行实例化。
19:介绍一下STL,详细说明STL如何实现vector。
STL是标准模版库,由容器算法迭代器组成。
STL有以下的一些优点:
(1)可以很方便的对一堆数据进行排序(调用sort());
(2)调试程序时更加安全和方便;
(3)stl是跨平台的,在linux下也能使用。
vector实质上就是一个动态数组,会根据数据的增加,动态的增加数组空间。
什么是容器。如何实现?
容器是一种类类型,用来存储数据
STL有7种主要容器:vector,list,deque,map,multimap,set,multiset.
20:变量的声明和定义有什么区别
变量的声明是告诉编译器我有某个类型的变量,但是定义会分配了内存。
21:简述#define #endif 和#ifndef的作用
这三个命令一般是为了避免头文件被重复引用。
#ifndef CH_H //意思是如果没有引用ch.h
#define CH_H //引用ch.h
#endif //否则不需要引用
22:引用与指针有什么区别?
(1) 引用必须被初始化,指针不必。
(2) 引用初始化以后不能被改变,指针可以改变所指的对象。
(3) 不存在指向空值的引用,但是存在指向空值的指针。
23:C++继承机制?
n类成员的访问控制方式
public:类本身、派生类和其它类均可访问;
protected:类本身和派生类均可访问,其它类不能访问;
private(默认):类本身可访问,派生类和其它类不能访问。
继承成员的访问控制规则
——由父类成员的访问控制方式和继承访问控制方式共同决定
private+public(protectd,private)=>不可访问
pubic(protected)+public=>pub