宏定义:
1.不带参数:
#define 宏名 替换内容
会在预编译时将代码中的所有引用的“宏”替换成“替换内容”
宏定义不分配内存
可以使用#undef取消宏定义
宏名必须是合法用户标识符
#define xx "asdd 是错误的,出现引号,必须成对
#define int* PINT
typedef int int* ;
int main()
{
int a;//实际是 int* a
PINT b;
#undef int// 取消 int 的宏定义
int c; //就是int c
}
2.带参数:
#define宏名(参数表) 字符串
替换时会将宏名替换为字符串,然后将字符串中的参数,替换为实参
但是这种情况不会参数不会被替换为实参 #define P(a) "a" ; 字符串中引号里面的内容只作第一步替换,不会变实参
宏定义中的参数是任意类型参数
枚举:
enum{变量名[=整型常数],变量名2[=整型常数],.......} ps:[]表示里面的内容可以省略,真实写代码时不能有[]
枚举只能是int型
如果没有初始化,则会自动按顺序初始化为0 1 2 3 ......
当某个成员初始化后,如果后面紧接的变量没有被初始化,则会将其初始化为前面的变量值+1
枚举里面的成员是常量,不能在之后的代码中进行赋值操作
只能把枚举的值赋值给枚举变量,不能直接把int型的数字赋值给枚举变量
常型变量:
定义后不能被修改
const int a = 10; a只能为10,不能通过给a赋值操作,改变a的值
大多数编译器可以用指向a的指针改变a的值,但是会报警告
常变量存放在只读数据段
部分内容摘抄自百度百科