首页 > 代码库 > C++ 面试基础

C++ 面试基础

1.Static 

Staic特点:只初始化一次,存在静态区,区别于Auto 变量,存在于栈中(函数结束,也就销毁)。

类内的staic:静态数据成员必须在类外初始化,静态成员函数只能调用静态变量,两者都不能用this指针调用。

2.Const

const int *a== int const* a a可变,a指向的对象不可变

int* const a : a不可变,指向对象可变

3.Switch

switch 的break 如果不写,就会在满足改条件的语句一直执行,直到break,或者函数结束;

4.为什么:

char str1*=“abc”;

char str*2=“abc”;

str1==str2成立? abc 存储在常量区域,大多数编译器都会把相同的常量只保持1份拷贝,所以str1和str2指向的地址是相同的。

5.Assert

Assert和assert的区别:前者在Debug版本中有,在Relase 版本不存在,而assert 都会存在;

#define NDEBUG 可以禁止调用宏;

6.enum

enum(a,b=1,c,d=2,e) == 0,1,2,2,3

7.argc和argv[]

(Test.c)int main (int argc,int*argv[]){.....}

命令行输入: Hong bi yue I 

argv[]=[Test, Hong,bi,yue,I ];

argc=5;

8.main 函数结束后

main 函数结束后,如果还想继续执行代码,可以再析构函数里面执行

9.++

a.

*p++ : *p -> p++ 地址加;

(*p)++ : (*p)++ 值加;

b.

s++=5 :错误,先执行取a的地址,装入寄存器,然后临时变量为a的值加1,程序不允许对临时变量赋值;

++s=5 :正确,取a地址,内容+1,放入寄存器;

10.浮点数的注意事项:

float a,b,c;

1.if(a==0):技术分享 浮点数存在精度问题,不是一个确切的值,需要转化为:>= 或者<=;

2. a+b=b+a;

 (a+b)+c 不一定等于 :(a+c)+b 浮点运算是不能被结合的 ------------???不懂

11.String 类实现注意点:

1.String :: String(const String &another)

{

   char* m_data;  //以调用strcpy()函数,故用指针

  m_data= http://www.mamicode.com/new char[strlen(another.m_data)+1]

  strcpy (m.data,another.m_data);

}

12.extern 和 export

 注:头文件中一般不定义变量,会引起重复定义,即使用 #ifdef,虽然头文件只被编译了一次,但是变量不只是会定义一次;

extren int n;

export template<class T> void f(T& t);

13 内存分配

(1)符号起始区块(BSS) :静态数据+ 未初始化的全局数据

(2)数据段: 静态内存分配,已初始化的全局数据

(3)代码段:程序执行代码

(4)堆 :动态分配的内存:malloc 和 new

(5)栈 :临时创建的局部变量

 

 

 

 

 

 

 

 

  

  

 

C++ 面试基础