03c语言——关键字static const extern volatile auto typedef


前言

提示:
局部变量:定义在函数内部的变量,作用域位函数体内部,生命周期为执行函数期间。
注意:函数形参也是局部变量。
全局变量:定义在函数外部的变量称为全局变量,作用域为整个项目所有.c文件都可以用,生命周期为从变量定义到程序执行结束。
注意:局部变量可以跟全局变量同名,具体是哪个变量在起作用采用就近原则。


提示:以下是本篇文章正文内容,下面案例可供参考

一、static

1.修饰局部变量

static 修饰局部变量:延长局部变量的生命周期。
void fun()
{
	static int a ;
}

作用域:函数内部,
生命周期:整个代码运行期间。

2.修饰全局变量

static 修饰全局变量:限定全局变量为本文件内使用。
static int a ;
void fun()
{
}
生命周期:
作用域:从定义的.c文件下使用,限定本文件使用。
生命周期:整个代码运行期间。

3.修饰函数

static 修饰函数:限定定义的该函数在本文件使用。
static void fun()
{
}
作用:在整个项目为了避免函数名重复。

二、const

1.const修饰常量(c语言中是伪常量)

常量a:

int main(void)
{
	const int a = 10;
	a = 20;//不可直接对变量进行修改
	int *p = &a;
	*p = 20;//这样在c语言中会警告但是可以编译运行
	return 0}

2.const修饰指针变量

const 修饰指针变量代表指针的指向不能改变:

int main(void)
{
	const int a = 10;
	const int b = 20;
	int *const p = &a;
	//p =&b;//指针指向不能改变
	return 0}

3.const修饰指针变量指向的内容

const 修饰指针变量代表指针的指向的内容不能改变:

int main(void)
{
	const int a = 10;
	const int * p = &a;
	//*p = 20;//指针指向的内容不能改变
	return 0}

4.const修饰指针变量指向的内容及指针变量

const 修饰指针变量代表指针的指向的内容不能改变:

int main(void)
{
	const int a = 10;
	const int b = 20;
	const int *const  p = &a;
	//p = &b;指针的指向不能改变
	//*p = 30;指针的指向的内容不能改变
	return 0}

5.const修饰指针变量的区分

从左向向右看,const修饰的是*的则代表指针指向的内容不能改变,const修饰的是指针变量则代表指针的指向不能改变。

三、extern

1.extern在一个文件内修饰外部变量

解释:一个变量的如果不在文件的最开始进行定义,那么其作用域时从定义开始到结束,如果要在定义之前使用数据那么在使用之前进行数据声明。
本文件一般用于函数声明,变量只能定义一次但可以被多次声明。

列:
extern int add(int a,int b);
int main(void)
{
	int a=10,b=20;
	add(a,b)
	return 0;
}
int add(int a,int b)
{
	return a+b;
}

2.extern在多个文件内修饰外部变量

解释:在一个项目中,如果要使用在另一个.c文件中变量或者函数,需要在头文件中进行声明,然后再.c文件中包头文件。

列:
extern int add(int a,int b);
int main(void)
{
	int a=10,b=20;
	add(a,b)
	return 0;
}
int add(int a,int b)
{
	return a+b;
}

四、volite

作用:因为cpu在读取数据的时候是硬盘到内存再到寄存器,cpu从寄存器上读取数据,有时编译器会进行优化cpu直接从寄存器上读取,而不从内存进行读取,加这个关键字就是cpu读的数据必须是从内存上读取的而不是从寄存器上读取数据。

五、auto

在定义变量的时候编程人员不知道是什么数据类型,这个时候就可以在数据前面写一个auto,让编译器去自己推这个数据是什么类型。

六、typedef

typedef 关键字:用于声明表变量类型,可以使代码变得更简洁
注意:
(1)只能用于声明各种类型名,不能用于定义类型。
(2)只能声明已经存在的数据类型,本质上是给以存在的类型起一个别名。
(3)在不同的源文件中使用typedef的话要在.h文件中进行声明,在源文件中使用把头文件包一下就行。
(4)方便代码的通用和移植,在不同的操作系统上int代表的存储大小不一样。
(5)typedef与#define的区别
例子:#define COUNT int;
typedef int COUNT ;
define是在预编译阶段进行的字符串替换
而typedef是在编译的时候处理,当于给已存在的数据类型起了一个别名。

总结

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值