C语言知识总结

1. 各种变量与零值的比较

(1)布尔(bool)变量

bool变量名字为flag,

if(flag) //表示flag为真

if(!flag) //表示flag为假

不能将bool变量直接与TRUE、FLASE或者1、0比较

(2)整型变量

if(0 == flag)

if(flag != 0)

(3)浮点变量

const float EPSINON = 0.00001;

if((flag >= -EPSINON)&&(flag <= EPSINON))

EPSINON是允许误差,即精度

(4)指针变量

if(NULL == p)

if(NULL != p)

 

2. 各种和指针相关的定义

(1)一个有10个指针的数组,指针指向整型数

int * a[10];

(2)一个指向有10个整型数数组的指针

int (*a)[10];

(3)一个指向函数的指针,该函数有一个整型参数并返回一个整型数

int (*a)(int);

(4)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

int (*a[10])(int);

 

char * const p; //常量指针,p的值不可以修改

char const * p;//指向常量的指针,指向的常量值不可以改

const char *p; //和char const *p

 

3. 一些常用的宏

(1)交换两个数

#define swap(x,y) (x)=(x)+(y);(y)=(x)-(y);(x)=(x)-(y);

(2)比较两个数返回较小的一个

#define Min(x,y) ((x)>(y)?(y):(x))

(3)一年有多少秒

#define SECONDS_YEAR (356*24*60*60)UL

(4)指定的某一位数置1

#define setbit(x,y) x|=(1<<y)

(5)指定的某一位数置0

#define clrbit(x,y) x&=~(1<<y)

(6)指定的某一位数取反

#define reversebit(x,y) x^=(1<<y)

(7)获取某一位的值

#define getbit(x,y) ((x)>>(y)&1)

 

4.中断服务函数注意事项

(1)不能返回值

(2)不能带参数

(3)不能执行好使操作如浮点运算

(4)不能printf打印

 

5. 关键字

auto 声明自动变量,缺省时编译器默认为此 const 声明只读变量 static 声明静态变量 register 声明寄存器变量 volatile 说明变量在程序执行中可被隐含的改变 typedef 用于给数据类型重命名 extern 声明变量是在其他文件正声明(也可以看做是引用变量) return 子程序返回语句(可以带参数,也可不带参数) void 声明函数无返回值或无参数,声明空类型指针 sizeof 计算对象所占内存空间大小

 

(1)auto

用于声明自动变量,变量的生存期为自动,在函数生命周期中声明的变量通常叫做局部变量,也叫自动变量

(2)const

1.声明常变量,使得指定的变量不能被修改。

const int a = 5;/*a的值一直为5,不能被改变*/

const int b; b = 10;/*b的值被赋值为10后,不能被改变*/

const int *ptr; /*ptr为指向整型常量的指针,ptr的值可以修改,但不能修改其所指向的值*/

int *const ptr;/*ptr为指向整型的常量指针,ptr的值不能修改,但可以修改其所指向的值*/

const int *const ptr;/*ptr为指向整型常量的常量指针,ptr及其指向的值都不能修改*/

2.修饰函数形参,使得形参在函数内不能被修改,表示输入参数。

如int fun(const int a);或int fun(const char *str);

3.修饰函数返回值,使得函数的返回值不能被修改。

const char *getstr(void);使用:const *str= getstr();

const int getint(void); 使用:const int a =getint();

(3)static

Static的用途主要有两个,一是用于修饰存储类型使之成为静态存储类型,二是用于修饰链接属性使之成为内部链接属性。

1.静态存储类型:

在函数内定义的静态局部变量,该变量存在内存的静态区,所以即使该函数运行结束,静态变量的值不会被销毁,函数下次运行时能仍用到这个值。

在函数外定义的静态变量——静态全局变量,该变量的作用域只能在定义该变量的文件中,不能被其他文件通过extern引用。

2. 内部链接属性

静态函数只能在声明它的源文件中使用。

(4)register

这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。

(5)volatile

一个定义为volatile的变量是说这变量可

能会被意想不到地改变,这样,编译器就不会去假设

这个变量的值了。精确地说就是,优化器在用到这个

变量时必须每次都小心地重新读取这个变量的值,而

不是使用保存在寄存器里的备份。下面是volatile变量

的几个例子:

1). 并行设备的硬件寄存器(如:状态寄存器)

2). 一个中断服务子程序中会访问到的非自动变量

(Non-automatic variables)

3). 多线程应用中被几个任务共享的变量

(6)typedef

typedef是为现有的类型起一个别名

typedef int size;

size flag = 1;和int flag =1;相同

 

typedef struct book{

char name;

int num;

}Book;

Book mybook;和struct book mybook;相同

(7)extern

extern关键字:只能用于扩展 没有被static关键字修饰的全局变量。默认情况下全局变量只能在定义它的文件中使用(从定义该全局变量开始到所在文件的文件尾),但如 果在另一个文件中将这个变量声明为外部变量,那么这个变量的作用域将被扩展到另外一个文件中。

extern关键字:在定义函数时如果在函数首部的最左端冠以关键字extern,则表示此函数是外部函数,可供其他文件调用。C语言规定,如果在定义函数时省略extern,则隐含为外部函数。

        在文件中要调用其他文件中的外部函数,则需要在文件中用extern声明该外部函数,然后就可以使用。

(8)return,break,continue

return:函数返回,可以带参数,也可不带参数

break:结束循环

continue:结束本次循环,继续下一次循环

 

6.局部变量和全局变量区别

(1)局部变量:定义在函数内部,只有在函数内部才有效;

(2)静态局部变量:定义在函数内部,只有在函数内部才有效;但是只会在开始分配一次内存,不会消失;

(3)全局变量:定义在所有函数之外,整个工程都可以使用;其他文件使用要加 extern关键字;且需要注意,改动一处全局变量的值会影响所有相同全局变量;

(4)静态全局变量:定义在所有函数之外,和全局变量一样,但是只有定义的文件才能使用;

 

局部变量

静态局部变量

全局变量

静态全局变量

作用域

局部

局部

全局

全局

内存空间

静态存储区

静态存储区

静态存储区

生命期

临时

长期

长期

长期

初值

随机值

0

0

0

特点

进入创建出去销毁

进入创建一直保留

开始创建一直保留

开始创建一直保留

本文件可用

 

7.如何通过被调函数修改主调函数普通变量的值

1. 实参必须为该普通变量的地址 

2. 形参必须为指针变量

3. 在被调函数中通过

*形参名 =..... 

的方式就可以修改主调函数相关变量的值 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值