首页 > 代码库 > 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++ 面试基础