C语言 变量与常量

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); // 访问静态全局变量a
    printf("b = %d\n", b); // 访问普通全局变量b
}
/* fileB.c */
extern int b;   // 使用extern声明全局变量b

void printB() {
    int b = 30;            // 定义一个同名的局部变量b
    printf("b = %d\n", b); // 访问局部变量b
}
/* fileC.cpp */
int g; // 定义全局变量g

void printB() {
    int g = 30;          // 定义一个同名的局部变量g
    cout << g << endl;   // 访问局部变量g
    cout << ::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 = 56

int a = ch - '0';  // a = 8;
// 或者
int a = ch - 48;   // 数字0的ascii为48

你可能感兴趣的:(C语言,c语言)