C语言知识点总结

C语言知识点总结

内容来自《C语言深度剖析》

1.关键字


C语言中有32个关键字,32个关键字如下(需要注意的是:sizeof是关键字,不是函数):

关键字意 义
auto声明自动变量,缺省时编译器一般默认为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条件语句否定分支(与if 连用)
for一种循环语句(可意会不可言传)
goto无条件跳转语句
sizeof计算对象所占内存空间大小

2.定义与声明的区别


定义:就是(编译器)创建一个对象,为这个对象分配一块内存并给它取上一个名字,这个名字就是所谓的变量名或对象名。

            一个变量或对象在一定的区域内(比如函数内,全局等)只能被定义一次,如果定义多次,编译器就会提示重复定义同一个变量或对象


声明:有两重含义:

           第一:告诉编译器,这个声明的名字已经匹配到一块内存上,在其下面的代码用到该变量或对象是在别处定义的。声明可以出现多次。

           第二:告诉编译器,该名字先预定,别的定义再也不能用它来作为变量名或对象名。


举例:

a) int i; ——定义

b) extern int i; ——声明


定义与声明的最重要的区别:

定义创建了对象并为这个对象分配了内存空间,声明没有分配内存空间!


3.关键字解析


3.1 auto

在缺省的情况下,所有的变量都是auto的。

3.2 register

该关键字请求编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。
注:
1) 此处是尽可能,不是绝对的。因此CPU的寄存器的数目是有限的。若定义了太多的register变量,就会没有足够的寄存器可用
2) register变量必须是能被CPU寄存器所接受的类型,也即register变量必须是一个单个的值,并且其长度应小于或等于整型的长度。而且register变量可能不存放在内存中,          所以不能用取址运算符”&“来获取register变量的地址。

3.3 static

在C语言中,该关键字主要有两个作用,在C++中对该关键字进行了扩展。

第一个作用:修饰变量。
变量分为局部和全局变量。但它们都存在内存的静态区。

静态全局变量,作用域仅限于变量被定义的文件中, 其他文件中即使使用extern声明也无法使用它。换种说法就是作用域从定义之处开始,到文件结尾处结束。在定义处前面的那些代码行也不能使用它,若想使用它,就得在前面再加extern ***。

静态局部变量,在函数体里面定义的,就只能在这个函数里用,同一个文件中其他的函数也用不了。
由于被static修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。

 第二个作用:修饰函数。
函数前面加上static使函数成为静态函数。
此处,”static“的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又成为内部函数)。
这样的好处是:不同的人编写不同的函数时,不用担心自己定义的函数是否会与其他文件中的函数同名。

3.4 基本数据类型----short、int、long、char、float、double

C语言包含的基本数据类型如下图所示:


3.5 extern

关键字extern置于变量或者函数前,以标示变量或函数的定义是在别的文件中。下面的代码用到的这些变量或函数在其他文件中,不是本文件定义的,提示编译器遇到此变量和函数是在其他模块中寻找其定义。

此处对extern ”C“进行说明(属于C++语言范畴):

extern "C"表明了一种编译规约,其中extern是关键字属性,“C”表征了编译器链接规范。对于extern "C"可以理解成在C++/C中的混合编程的编译指令。
明白了这层意思,下面的代码就不难解释了:
#ifdef __cplusplus /*如果采用了C++,如下代码使用C编译器;*/
extern "C" /*如果没有采用C++,顺序预编译
{
#endif
/*代码段*/ /*采用C编译器编译的C语言代码段*/
#ifdef __cplusplus /*结束使用C编译器*/
}
#endif

3.6 typedef

typedef的作用分为如下:
1) 为现有类型创建一个新的名字。
例如:typedef int size;
注:typedef并不创建新的类型,仅仅是为现有类型另取一个名字而已
2)typedef还可以掩饰符合类型,如指针和数组,
例如:
typedef char Line[81];
Line text, secondline;//表示char text[81], secondline[81];

typedef char* pstr;//隐藏指针
int mystrcmp(pstr, pstr);

3.7 struct与class的区别

在C++中,struct关键字与class关键字一般可以通用,
它们只有一个很小的区别:
struct的成员默认情况下属性是public的。
而class成员默认情况下属性是private的。

既然struct与class可以通用,那么也就说明了结构体内也是能放函数的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值