C语言关键字汇总

static (存储在程序静态区)

1.未经初始化的静态全局变量会被程序自动初始化为0(在函数体内声明的自动变量的值是随机的,除非它被显式初始化,而在函数体外被声明的自动变量也会被初始化为0);

2.静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;☆☆

3.定义全局变量就可以实现变量在文件中的共享,但定义静态全局变量还有以下好处:☆☆

1).静态全局变量不能被其它文件所用;

2).其它文件中可以定义相同名字的变量,不会发生冲突;

4.static 定义的函数:只有在该文件有作用,其他文件不起作用(用extern;

static定义局部变量:局部变量存储在栈中。

int example(){int a=0;a++;}      调用example()都返回1

int example(){static int a=0;a++;}  调用example()返回 调用次数(a++)

 

Register(存储在寄存器)

1.Register只是请求寄存器变量,不一定成功;☆☆

2.Register变量必须是运行的CPU寄存器可以接受的值;

3.不能用&获取register变量地址;

4.Register不能修饰全局变量,应该修饰局部变量(实时性高,使用频繁高,建议使用)。☆☆

 

Auto()(存储在栈)

1.局部变量默认为auto

 

 

 

 

 

 

 

 

 

 

 

 

if语句

 

1.变量与0比较时,0放在等号的左边

If0  ==  i

2.float 不能与0直接比较

#define E 0.0000001

....

float a = 5.0;

if((5 - E <= a&& a <= 5 + E))

{....}

 

 

switch语句

 

1.switchch

{

case a:  .....;

case b:  .....;

case c:  .....;break;

default : ......;break;

}

 

2.使用情况 ☆☆

1)当判定条件为范围时,用if较好;

2)当判定条件为具体的值时(a,b,c,1,2,3),用switch较好。

 

3.dowhilefor语句

do:必执行一次循环;

while(a):  a=0不执行;  a!=0执行;

 

4.breakcontinue区别

break:终止循环执行;(跳出当前块----就是{..})

continue:终止本次循环;

 

5.do while 使用技巧(do while 是一个块(入口-------出口) 程序可以确定一个入口和出口)☆☆

int fuc(int n)

{   int  i = 0;   int ret =0;   int *p= (int *)malloc(sizeof(int)*n);

do {  If( NULL == p) break;  If(n<0)break;

for(i=0;i<n;i++)  {p[i]=i;}

}while(0);

free(p);  return ret;    

}

6.void

不存在void类型,但存在void*(接收任何类型的指针)。

7.extern

extern:   1)声明外部定义的变量 和函数    2)告诉编译器用标准“C”编译

8.sizeof

sizeof 不是函数  是编译器的内置指示符  或者  关键字

int a;   printf(“%d\n”,sizeof(a));

9.const

1.const修饰的变量是只读的,占用内存空间(可以通过指针对其改变);

2.const 修饰的数组是不可以改变

3.const 修饰函数---->函数的返回值不可改变(但是可以通过改变函数返回的地址改变数据)

口诀:左数右指

const int* p    //p指向的数据不可改变(*p)p指向的地址可改变

int const* p //p指向的数据不可改变(*p)p指向的地址可改变

 int* const p //p指向的数据可改变(*p)p指向的地址不可改变

const int* const p //p指向的数据不可改变(*p)p指向的地址不可改变

 

1)指针指向的变量的值不能变,指向可变

int x = 1;

int y = 2;

const int* px = &x;

int const* px = &x; //这两句表达式一样效果

px = &y; //正确,允许改变指向

*px = 3; //错误,不允许改变指针指向的变量的值

2)指针指向的变量的值可以改变,指向不可变

int x = 1;

int y = 2;

int* const px = &x;

px = &y; //错误,不允许改变指针指向

*px = 3; //正确,允许改变指针指向的变量的值

3)指针指向的变量的值不可变,指向不可变

int x = 1;

int y = 2;

const int* const px = &x;

int const* const px = &x;

px = &y; //错误,不允许改变指针指向

*px = 3; //错误,不允许改变指针指向的变量的值

10.volatile

1)告诉编译器每次取值要去内存中;

2)主要修饰那些被多线程访问的变量;

3)因未知因素改便的变量;

11.柔性数组

typedef struct _soft_arry {int len; int arry[];}soft_arry;

int main()

{

int i=0;

soft_arry* sa = (soft_arry)malloc(sizeof(soft_arry) + sizeof(int) * 10);

sa->len = 10;

for(i = 0;i<sa->len;i++)

{

sa->arry[i] = i+1;

}

free(sa);     return 0;   }

 

12.unionstruct区别

union分配最大类型空间,struct分配每个域相加的空间;

struct A{int a; int b;int c;}--->sizeof() === 12

union B{int a; int b;int c;}--->sizeof() === 4

 

13.enum

自定义类型;  默认常量是前面值加10,1,2,3,4...);    

enum变量取值范围为定义的离散值

enum color{ GREEN, RED, BULE};   enum color c = RED;

14.Typedef

Typedef用于已经存在的数据类型重命名;  typedef重定义的类型不能进行unsigned修饰

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值