【C语言入门】常见关键字

本文详细介绍了C语言中的常见关键字,包括auto、break、case、typedef、static等,并分别探讨了它们在修饰局部变量、全局变量和函数时的用途及示例。特别关注了typedef类型重命名和static关键字对变量存储和生命周期的影响。
摘要由CSDN通过智能技术生成

【C语言入门】常见关键字

十三、常见关键字

C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创造关键字的

1 常见关键字

关键字说明
auto声明自动变量。所有局部变量默认都是auto,一般省略不写。
break跳转语句,用在循环语句、switch-case语句中。
caseswitch语句中的分支,充当入口的作用。
char字符类型
const用来修饰常变量
continue跳转语句,用在循环语句中。
default用在switch-case语句中,充当其他分支的作用。
dodo-while循环语句
double双精度浮点型
elseif-else语句
enum枚举类型
extern声明外部符号
float单精度浮点型
forfor循环语句
goto跳转语句
ifif语句
int整型
long长整型
register寄存器类型
return用于函数的返回
short短整型
signed修饰整型,意思是有符号的。
sizeof计算变量或类型的大小
static存储类说明符,意思是静态的,用来修饰变量(局部变量、全局变量)和函数。
struct结构体类型
switchswitch语句
typedef类型重定义(类型重命名)
union联合体(共用体)
unsigned修饰整型,意思是无符号的。
void空类型,可以修饰指针,也可以充当函数的返回值和函数的形式参数。
volatile类型修饰符,可以解释为“直接存取原始内存地址“,后期再学习。
whilewhile循环语句

注意:这些关键字在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.ctest.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语言的关键字;介绍了 typedefstatic 关键字;重点讲解了 static 关键字修饰局部变量、全局变量、函数的前后变化以及不同结论。


感谢您的阅读!如有任何错误,欢迎您的批评指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值