while循环中指针会自动释放吗_C++】C++常见面试题汇总_持续更新中...

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都是声明类的关键字

区别是:

4dae8d0235ba505754be176538206d5f.png

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:类的成员函数重载、覆盖和隐藏的概念和区别?

c199e09a49f5be94e383a10b51587489.png

14:static关键字?

b291a21dfacea9a73026da44ec644460.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值