C语言-第三天!
关键字(32个)
关键字 |
说明 |
|
声明自动变量 |
|
声明短整数 |
|
声明整数 |
|
声明长整数 |
|
声明单精度浮点型 |
|
声明双精度浮点型 |
|
声明字符型变量或函数返回值类型 |
|
声明结构体类型 |
|
声明共用类型 |
|
声明枚举类型 |
|
重命名数据类型 |
|
定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变 |
|
声明无符号类型 |
|
声明有符号类型 |
|
声明外部变量 |
|
声明寄存器变量 |
|
声明静态变量 |
|
说明变量在程序执行中可隐含的被改变 |
|
声明函数无返回值或者无参数,声明无类型指针 |
|
条件语句 |
|
条件语句否定分支(与if连用) |
|
用于开关语句 |
|
开关语句分支 |
|
开关语句中默认分支 |
|
循环语句 |
|
循环语句的循环条件 |
|
循环语句中的循环条件 |
|
结束当前循环,开启下一轮循环 |
|
跳出当前循环 |
|
无条件跳转语句 |
|
计算数据类型长度 |
|
子程序返回语句(可带参数丶也可不带参数)循环条件 |
1.auto
代码块内部定义的变量是局部变量,局部变量是用auto
修饰的,一般都会省略
2.register
越往上,离CPU越近,效率越高,价格更贵.相反最下面∏层越远,越低,越便宜.
register数量有限,一个程序一般用一两个.
哪些变量可以用register
修饰
- 局部(全局会导致CPU寄存器被长时间占用)
- 不会被写入(写入就需要写回内存,后续还要读取检测,register没有意义)
- 高频被读取(提高效率)
- 不能被大量使用,寄存器有限
register
修饰的变量不能取地址,寄存器没有地址的概念,地址是在内存中相关.
3.static
修饰全局变量
对于全局变量来说,定义了一个全局之后,就可以通过使用extern
声明不在本文件内部的全局变量来进行使用。所以全局变量是可以跨文件被访问的。而static
修饰的全局变量只能够在本文件内部被使用。
修饰局部变量
对于局部变量来说,其生命周期是在定义的代码块内部。但是如果用static修饰局部变量。其生命周期就会变成全局变量的生命周期。但是要注意,虽然其生命周期发生改变,但是其作用域却不发生改变。
function1函数中的i是一个局部变量,函数结束就会被销毁。而下一次调用又重新初始化,所以每一次的结果都是一样的。
而function2函数中的i是一个由static
修饰的局部变量,其生命周期变为全局变量的生命周期。所以函数结束也不会被销毁。才会是我们看到的递增的打印。
同时,被static修饰的全局变量和局部变量都会存放在内存中的静态区。
修饰函数
没有被static
修饰的函数是可以在被别的文件调用的。但是一但加了static修饰,就只能够在本文件内部使用。这个功能常用来隐藏一些不想被其他人看到的函数细节。
4.sizeof
sizeof
可以求出对应类型在内存开辟空间的大小.注意:sizeof
可不是函数,也不是宏,他是关键字丶操作符.
5.signed
丶unsigned
signed
表示有符号数,最高位为符号位表示数据的正负.
unsigned
表示无符号数,则没有符号位.
默认情况下整型变量都是有符号数,即signed
丶int
。
6.if
丶else
7.switch
丶case
丶break
丶default
8.do
丶while
丶for
丶continue
while循环、do-while循环和for循环。continue和break的不同之处在于其是跳过本次循环进入下一次循环,而break则是直接跳出循环。
9.goto
(可以实现跳转,跳转到标签所在位置,但是不能跨代码块实现)
10.void
修饰函数返回值和函数参数
1 不需要参数时候,应该声明参数为void2 不需要返回值,应该声明为void
类型
3 void*
指针默认不能++,原因是指向的void
类型不知大小
4 如果返回需要任意类型指针,声明类型为void*
5 void
不能定义一个变量,因为大小未知
11.return
终止一个函数,并返回其后面跟随的值
12.const
const修饰的变量,不可直接被修改。但是却可以通过指针的解引用来进行修改。
直接修改const修饰的变量:
看一下通过指针间接修改:
const
修饰指针变量分为几种情况:
-
const int *p;
// p 可变,p 指向的对象不可变 -
int const *p;
// p 可变,p 指向的对象不可变 -
int *const p;
// p 不可变,p 指向的对象可变 -
const int *const p;
//指针 p 和 p 指向的对象都不可变
同时const
也可以修饰函数参数,const
修饰符也可以修饰函数的返回值,返回值不可被改变。例如: const int Fun (void);
也可以在另一连接文件中引用 const
只读变量:
extern const int i;
//正确的声明
extern const int j=10;
//错误!只读变量的值不能改变
13.volatile
可以忽略编译器优化,保持内存可见性
14.extern
声明变量或者函数
在本文件中给外来的变量或函数带了顶帽子,告诉本文件中所有代码,这些家伙不是本地人。提示编译器遇到此变量和函数时在其他模块中寻找其定义。
15.struct
结构体
16.union
联合体类型丶enum
枚举类型
union
关键字和struct结构较为类似。但是,union
内部成员共享一个存储空间同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址。同时,联合体总空间大小要能整除其任意成员的空间大小。
枚举类型的成员都是常量。是具有相关性的一些常量
枚举与#define
宏的区别:
1),#define
宏常量是在预编译阶段进行简单替换。枚举常量则是在编译的时候确定其值。
2),一般在编译器里,可以调试枚举常量,但是不能调试宏常量。
3),枚举可以一次定义大量相关的常量,而#define
宏一次只能定义一个。
17.typedef
对类型进行重命名
- 对一般类型进行重命名
- 对结构体类型进行重命名
- 对指针进行重命名
- 对复杂结构进行重命名
summarize
数据类型关键字(12个)
char : 声明字符型变量或函数
short:声明短整数变量或函数
int:声明整型变量或函数
long:声明长整型变量或函数
signed:声明有符号类型变量或函数
unsigned:声明无符号类型变量或函数
float:声明浮点型变量或函数
double:声明双精度浮点型变量或函数
struct:声明结构体变量或函数
union:声明共用体数据类型
enum:声明枚举类型
void:声明函数无返回值或无参数,声明无类型指针
控制语句关键字(12个)
- 循环控制(5个)
-
for
:循环语句 -
do
:循环语句的循环体 -
while
:循环语句的循环条件 -
break
:跳出当前循环 -
continue
:结束当前循环,开始下一轮循环
- 条件语句(3个)
-
if
:条件语句 -
else
:条件语句否定分支 -
goto
:无条件跳转语句
- 开关语句(3个)
-
switch
:用于开关语句 -
case
:开关语句分支 -
default
:开关语句中的"其他分支"
- 返回语句(1个)
return
:函数返回语句(可以带参数,也可以不带)
存储类型关键字(5个)
注意:在C语言中存储类型关键字在使用时只能存在一个,不能共存
auto
:声明自动变量,一般不使用
extern
:声明变量是在其他文件中声明
register
:声明寄存器变量
static
:声明静态变量
typedef
:用以给数据类型取别名(但是该关键字被分到存储关键字分类中,虽然看起来没什么相关性)
其他关键字(3个)
const
:声明只读变量
sizeof
:计算数据类型长度
volatile
:说明变量在程序执行中可被隐含地改变