【C语言入门】常见关键字
文章目录
十三、常见关键字
C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创造关键字的。
1 常见关键字
关键字 | 说明 |
---|---|
auto | 声明自动变量。所有局部变量默认都是auto,一般省略不写。 |
break | 跳转语句,用在循环语句、switch-case语句中。 |
case | switch语句中的分支,充当入口的作用。 |
char | 字符类型 |
const | 用来修饰常变量 |
continue | 跳转语句,用在循环语句中。 |
default | 用在switch-case语句中,充当其他分支的作用。 |
do | do-while循环语句 |
double | 双精度浮点型 |
else | if-else语句 |
enum | 枚举类型 |
extern | 声明外部符号 |
float | 单精度浮点型 |
for | for循环语句 |
goto | 跳转语句 |
if | if语句 |
int | 整型 |
long | 长整型 |
register | 寄存器类型 |
return | 用于函数的返回 |
short | 短整型 |
signed | 修饰整型,意思是有符号的。 |
sizeof | 计算变量或类型的大小 |
static | 存储类说明符,意思是静态的,用来修饰变量(局部变量、全局变量)和函数。 |
struct | 结构体类型 |
switch | switch语句 |
typedef | 类型重定义(类型重命名) |
union | 联合体(共用体) |
unsigned | 修饰整型,意思是无符号的。 |
void | 空类型,可以修饰指针,也可以充当函数的返回值和函数的形式参数。 |
volatile | 类型修饰符,可以解释为“直接存取原始内存地址“,后期再学习。 |
while | while循环语句 |
注意:这些关键字在C语言中已经指定了它们的用途或保留它们的使用权,不能用他们作为标识符(如:变量名)使用。
2 typedef
关键字
typedef
用来重新定义类型的名称,可理解为类型重命名。
代码示例:
#include<stdio.h>
typedef unsigned u_int;
typedef unsigned long long ull;
int main()
{
//typedef关键字
//将unsigned int重命名为:u_int,新类型名与原类型名等价
unsigned int num1 = 0;
u_int num2 = 0;
unsigned long long num3 = 0;
ull num4 = 0;
return 0;
}
解释说明:
1 可以使用 typedef
关键字,将较长的类型名称重新命名为新的名称,新的类型名与原类型名等价。
3 static
关键字
在C语言中,static
是用来修饰变量和函数的。
3.1 用途
-
修饰局部变量,称为静态局部变量。
-
修饰全局变量,称为静态全局变量。
-
修饰函数,称为静态函数。
3.2 修饰局部变量
3.2.1 示例1
#include<stdio.h>
//代码1
void test()
{
int n = 0;
n++;
printf("%d ", n);
}
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
test();//1 1 1 1 1 1 1 1 1 1
}
return 0;
}
解释说明:
1 test();
:调用 test
函数。
每次函数调用,进入 test
函数后都会重新创建变量 n
;函数调用结束后,该局部变量就被销毁。故每次打印的结果都是1。
3.2.2 示例2
#include<stdio.h>
//代码2
void test()
{
//static修饰局部变量
static int m = 0;
m++;
printf("%d ", m);
}
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
test();//1 2 3 4 5 6 7 8 9 10
}
return 0;
}
解释说明:
1 static int m = 0;
:static
修饰局部变量 m
。
该变量被存放在了静态区,在程序执行前就已经被创建,且只创建了一次。(编译期间创建)
该局部变量被 static
修饰,延长了其生命周期,但未改变其作用域(只能在 test
函数内使用)。
test
函数调用完后,变量 m
并不会被销毁,当下一次函数调用后,m
仍是上一次 m++
计算后得到的值。
3.2.3 结论
1 static
修饰局部变量,改变了变量的生命周期。改变了变量的存储类型(存储位置)。由存放到栈区转变为存放在静态区。
静态局部变量出了作用域仍然存在,直到程序结束,生命周期才结束。
2 静态局部变量的作用域没有被改变,只能在作用域内使用。
3.3 修饰全局变量
3.3.1 示例1
//add.c
int g_val = 2024;//全局变量
//test.c
#include<stdio.h>
extern int g_val;//声明外部符号
int main()
{
printf("%d\n", g_val);
return 0;
}
解释说明:
1 add.c
与 test.c
是同属于一个工程下的不同源文件。
2 extern int g_val;
使用 extern
声明外部符号。g_val
这一全局变量就可以在其他源文件中使用。
3.3.2 示例2
//add.c
static int g_val1 = -2024;//static修饰全局变量
//test.c
#include<stdio.h>
extern int g_val1;//声明外部符号
int main()
{
//static修饰全局变量
printf("%d\n", g_val1);//error:无法解析的外部符号 _g_val1
return 0;
}
解释说明:
1 static int g_val1 = -2024;
使用 static
修饰全局变量 g_val1
。
全局变量原本就存储在静态区,使用 static
修饰后,改变了全局变量的链接属性,从外部链接属性变成了内部链接属性。
全局变量本身具有外部链接属性,在同一工程其他源文件内可以被使用。
被 static
修饰后,静态全局变量只能在本身的源文件中被使用,不能再跨源文件使用。
类似于作用域变小了,即被限制了使用范围。
2 在编译时出现了链接错误://error:无法解析的外部符号 _g_val1
3.3.3 结论
一个全局变量被 static
修饰,那么这个全局变量只能在本源文件内部使用,不能在其他源文件内使用。(不能跨文件使用)
3.4 修饰函数
3.4.1 示例1
//add.c
int Add(int x, int y)
{
return x + y;
}
//test.c
#include<stdio.h>
//声明外部符号
extern int Add(int, int);//可以省略形参名
int Add(int, int);//可以省略extern
int main()
{
printf("%d\n", Add(2, 3));//5
return 0;
}
解释说明:
1 extern int Add(int, int);
:使用 extern
声明外部符号。
因为是函数,可以写成函数声明的形式:int Add(int, int);
,有着同样的效果。
3.4.2 示例2
//add.c
static int Add(int x, int y)//static修饰函数
{
return x + y;
}
//test.c
#include<stdio.h>
extern int Add1(int, int);
int Add1(int, int);
int main()
{
//static修饰函数
printf("%d\n", Add1(2, 3));
//error:无法解析的外部符号 _Add1,函数 _main 中引用了该符号
return 0;
}
解释说明:
1 static int Add(int x, int y) { return x + y; }
:static
修饰函数。
使用 static
修饰函数,改变了函数的链接属性,使得函数只能在本源文件内部使用,不能在其他源文件内使用。
2 在编译时出现了链接错误://error:无法解析的外部符号 _Add1,函数 _main 中引用了该符号
3.4.3 结论
一个函数被 static
修饰,使得这个函数只能在本源文件内部使用,不能在其他源文件内使用。(不能跨文件使用)
总结:
本节简单列举了C语言的关键字;介绍了 typedef
与 static
关键字;重点讲解了 static
关键字修饰局部变量、全局变量、函数的前后变化以及不同结论。
感谢您的阅读!如有任何错误,欢迎您的批评指正!