目录
auto
int
double
long
char
float
short
signed
unsigned
struct
union
enum
static
switch
case
default
break
register
const
volatile
typedef
extern
return
void
continue
do
while
if
else
for
goto
sizeof
-
auto
声明自动变量,缺省时编译器一般默认为 auto
-
int
声明整型变量
-
double
声明双精度变量
-
long
声明长整型变量
-
char
声明字符型变量
-
float
声明浮点型变量
-
short
声明短整型变量
-
signed
声明有符号类型变量
-
unsigned
声明无符号类型变量
-
struct
声明结构体变量
-
union
声明联合数据类型
-
enum
声明枚举类型
-
static
声明静态变量
static的作用
第一个作用:修饰变量。
变量又分为局部和全局变量,但它们都存在内存的静态区。
静态全局变量:
作用域仅限于变量被定义的本C文件中,其他文件即使用 extern 声明也没法使用他。准确地说作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些 代码行也不能使用它。想要使用就得在前面再加 extern ***。
静态局部变量:
在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他 函数也用不了。由于被static 修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。
第二个作用:修饰函数。
函数前加 static 使得函数成为静态函数。但此处“static”的含义 不是指存储方式,而是指对函数的作用域仅局限于本C文件(所以又称内部函数)。
-
switch
用于开关语句
-
case
开关语句分支
-
default
开关语句中的“其他”分支
-
break
跳出当前循环
-
register
声明寄存器变量
register int i= 1024;
寄存器存在于CPU内部,运算速度非常快, 因为内存中的数据必须载入寄存器才能计算。如果直接定义一个变量为寄存器变量,则少了载入等过程自然会快。对于频繁使用的变量可以把它放在寄存器中来提速度。
注意:
虽然寄存器的速度非常快,但是使用 register 修饰符也有些限制的:register 变量必须是 能被 CPU 寄存器所接受的类型。意味着 register 变量必须是一个单个的值,并且其长度应小 于或等于整型的长度。 而且 register 变量可能不存放在内存中,所以不能用取址运算符“&” 来获取 register 变量的地址。
-
const
声明只读变量
-
volatile
说明变量在程序执行中可被隐含地改变
volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。
volatile int v_int = 1024;
当要求使用 volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。
-
typedef
用以给数据类型取别名(当然还有其他作用)
typedfe unsigned short u_16; //u_16 可以代表unsigned short类型,使得程序的可移植性得到了有效的提高;
u_16 u_short = 64 ==> unsigned short u_short = 64
typedfe unsigned int u_32;
u_32 u_int = 1024; ==> unsigned int u_int = 1024;
还可以在定义结构体时使用typedef,也是非常方便
typedef struct st_person
{
char *m_name;
int m_age;
}s_person;
s_person m_person;
就可以用s_person来代替struct st_person,
-
extern
声明变量是在其他文件正声明(也可以看做是引用变量)
例如声明其他文件可以访问的全局变量或函数:
extern int g_val = 1024; //除了本C文件外,和导入此文件的头文件的C文件按都可以访问,但一般不建议这样做,这样会导致线程不安全,因为当多个线程来访问这个变量时,则这个变量就会变为临界资源,会导致每个线程返回的结果和所期望的结果不一致,因为其他线程也会改变这个变量,解决方法是加入锁的机制,类似于商场的换衣间,有人进去之后就会上锁,出来之后就会释放锁。同样当有线程访问这个变量时就会上锁,访问完成后就会释放锁。以便其他线程访问。
extern int func(); //本C文件和导入此文件的头文件的C文件都可以访问。
-
return
子程序返回语句(可以带参数,也可不带参数)
-
void
声明函数无返回值或无参数,声明空类型指针
-
continue
结束当前循环,开始下一轮循环
-
do
循环语句的循环体
-
while
循环语句的循环条件
-
if
条件语句
-
else
条件语句否定分支(与 if 连用)
-
for
一种循环语句(可意会不可言传)
-
goto
无条件跳转语句(建议是少用,但是如果用的巧妙,就会发现他特别妙)
-
sizeof
计算对象所占内存空间大
int * p_int = NULL;
sizeof(p_int); //它的大小有操作系统的位数决定,如果是32位的操作系统,用sizeof来求一个指针的大小永远位4字节;如果是64位的操作系统,用sizeof来求一个指针的大小永远位8字节,与该指针的类型无关。char *p_char 、double *p_double……