1. 解释#ifdef
#ifdef是条件指示符,用来判断某个预处理器常量是否已被定义,如果该预处理器常量被定义,#ifdef后面的代码才会被编译。#ifdef的一个主要用途就是防止头文件重复处理。
2. #define一个宏,比较两个数的大小,不能使用大于、小于和if语句
3. staic的作用
1)static局部变量:内存分配在全局数据区。执行到声明处时初始化,下次函数调用不再初始化,值维持上次的值。如果没有显示初始化,自动初始化为0. 作用域为局部作用域。
2)static全局变量:内存分配在全局数据区。如果没有显示初始化,自动初始化为0. 只在声明它的文件内可见。
3) static函数:只在声明它的文件内可见。
4)static成员变量:属于整个类,类的所有对象只有一份拷贝。内存分配在全局数据区。
5)static成员函数:属于整个类,不接收this指针,只能访问statci成员变量和static成员函数。
4. const的作用
定义常量。修饰函数参数和返回值。修饰函数定义体。被const修饰,可以得到强制保护,预防意外修改,提高程序健壮性。
1)const修饰函数参数
- const只修饰输入参数,输出参数不需要const。
- 修饰指针传递的参数:防止意外修改指针指向的内容。对于值传递的参数,函数会自动产生临时变量复制该参数,不需要const修饰。
- 修饰自定义类型引用传递的参数:自定义类型引用传递,不会产生临时对象的构造、复制和析构,提高了效率。加上const修饰,防止修改该参数。
2)const修饰函数返回值
- 对于值传递的函数返回值,函数会自动产生临时变量复制该参数,不需要const修饰。
- 修饰指针传递的函数返回值:该返回值的内容不能被修改,且只能被赋值给被const修饰的同类型指针。
- 修饰自定义类型引用传递的返回值:一般用在类的赋值函数中。
3)const修饰函数定义体: 任何不修改数据成员的函数都应该声明为const类型。
5. 比较sizeof和strlen
1) sizeof是操作符,返回一个对象或类型名的字节长度,返回值类型为size_t. strlen是一个函数,计算给定字符串的长度,只能用char*做参数,且必须是‘\0’结尾的。
2)sizeof操作符是编译时刻计算,可看做常量表达式。strlen是运行时刻计算的。