1. 修饰符
a)extern:声明一个已定义的变量,不能重新赋值;
注意:不建议在头文件中定义变量,而在源文件中定义,然后在头文件中使用extern声明。
因为若头文件中定义了变量,然后多个源文件使用该头文件,编译时会报重定义错误。
b)const:修饰的变量不可变;
c)volatile:防止编译器优化;
d)register:建议将变量定义在寄存器中;
2. static变量、全局变量、局部变量
a)static全局变量只能在本文件中访问;
b)static局部变量只初始化一次,下次仍旧使用上次的值;
c)普通全局变量可在其他文件中访问,但访问前需用extern声明;
d)局部变量和全局变量重名,则在局部变量作用域内优先使用局部变量;
e)C++中,局部变量和全局变量重名,在局部变量作用域内想访问全局变量,则可使用::作用域符号,如 ::a;
例子如下:
/* fileA.c */
static int a = 10; // 静态全局变量,只能在本文件中访问
int b = 20; // 普通全局变量,可在其他文件中访问void printA() {printf("a = %d\n", a); // 访问静态全局变量aprintf("b = %d\n", b); // 访问普通全局变量b
}
/* fileB.c */
extern int b; // 使用extern声明全局变量bvoid printB() {int b = 30; // 定义一个同名的局部变量bprintf("b = %d\n", b); // 访问局部变量b
}
/* fileC.cpp */
int g; // 定义全局变量gvoid printB() {int g = 30; // 定义一个同名的局部变量gcout << g << endl; // 访问局部变量gcout << ::g << endl; // 访问全局变量g
}
3. 打印格式
有符号int | %d |
无符号int | %u |
有符号short | %hd |
无符号short | %hu |
有符号long | %ld |
无符号long | %lu |
字符 | %c |
float,精度最大7位小数 | %f (%m.nf,m:打印总宽度,n:小数位数) |
double,精度最大15位小数 | %lf |
注意:
(1)
char ch = 'a';sizeof(ch); // 1
sizeof('a'); // 4,因为'a'为97,是int类型
(2)将字符转为数字:减去 '0' 即可
char ch = '8'; // ch = 56int a = ch - '0'; // a = 8;
// 或者
int a = ch - 48; // 数字0的ascii为48