C语言部分关键字

void 、 char 、 int、float、 double、 short、long、signed、unsigned、struct、union、 

enum 、 typedef、sizeof、auto、static、register、extern 、const、volatile、return

continue、break、goto、if、else、switch、case、default、for、do、while

 

union:共用体

结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

//方式1    先定义共用体,再创建变量,
union data{
  int n;  
  char ch;  
  double f;  
};
union data a,b,c;
//方式2 也可以在定义共用体的同时创建变量
union data{
  int n;  
  char ch;  
  double f;  
}a,b,c;
//方式3不再定义新的变量,也可以将共用体的名字省略
union{
    int n;
    char ch;
    double f;
} a, b, c;

 

enum :申明枚举

//关键字+枚举类型的名字

enum typeName
{
  valueName1,
  valueName2,
  valueName3,
           .
           .
           .
};
//举例
enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };
//也可以在定义枚举类型的同时定义变量:
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a, b, c;

 

 

typedef与define是给对象起另外的名字,主要为了简化程序和增强可读性

typedef:申明类型名称,在编译时处理,有类型检查功能。它在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typedef。

如:typedef int (pfun)(int,int)        加上typedef会由函数指针变量变为函数指针类型。

#define不只是可以为类型取别名,还可以定义常量、变量、编译开关等

 

define:是预处理指令,也称作宏定义,在预处理时进行简单而机械的字符串替换,不作正确性检查,没有作用域的限制,

#define     INTPTR1     int*
typedef     int*            INTPTR2;

 

典型错误用法

//带分号
#defineN 100;

//定义指针类型
#define pin (int*)
pin a,b;
int* a,b; 
/*本意是a和b都是int型指针,但是实际上变成int* a,b;a是int型指针,而b是int型变量。这是应该使用typedef来代替define,这样a和b就都是int型指针了。*/

 

static与const

static:

  1、修饰局部变量--存放在静态存储区,生命周期是整个程序结束。
  2、修饰函数和全局变量--限制该全局变量或者函数的作用域仅限于本文件

特点:

  a、记忆性:在第二次调用进入时, 能保持第一次调用退出时的值.,造成不同时刻至运行的结果可能不同.

  b、生存期:全局性和唯一性,每次调用时,都指向同一块内存,这就造成一个很重要的问题,不可重入性。

优点:

  不用担心自己定义的函数,是否会与其它文件中的函数同名。

  

const:定义常量,常量的值不能改变

优点:

  1、可以保护被修饰的东西,防止意外修改,增强程序的健壮性 

const int n=5;等同于
int const n=5;

 

//常量指针是指针指向的内容是常量,可以有一下两种定义方式
const int * n;
int const * n;
//指针常量是指指针本身是个常量,不能在指向其他的地址
int *const n;

 

 

volatile:精确地说就是,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问;

 

posted @ 2020-04-01 00:20  三字经  阅读(201)  评论(0编辑  收藏  举报