c语言语法基础之——局部变量及存储类别、全局变量及存储类别、宏定义 学习

本文探讨了C语言中的宏定义技巧及其在main()函数中的应用,同时区分了局部变量(包括自动变量、静态局部和寄存器变量)的概念和作用域。讲解了全局变量的存储类别,以及如何通过extern和static扩展变量的作用域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

宏定义

// 宏定义只是替身,不需要小括号,一般命名用大写字母
#define B(c) c*c
main(){
int m=5, n=8,k;
k=10*B(m+n); // 是 10*5+8*5+8=98 而不是10*(5+8
)*(5+8)
printf("%d",k);
}

局部变量

定义变量可能有3种情况:

(1)在函数的开头定义;
(2)在函数内的复合语句内定义;
(3)在函数的外部定义。

具体定义:

在一个函数内部定义的变量只在本函数范围内有效,也就是说只有在本函数内才能引用它们,在此函数以外是不能使用这些变量的。在复合语句内定义的变量只在本复合语句范围内有效,只有在本复合语句内才能引用它们。在该复合语句以外是不能使用这些变量的,以上这些称为“局部变量”。

在这里插入图片描述

全局变量

定义

在函数外部定义的变量属于外部变量也成全局变量或全程变量。
全局变量可以为本文件的其他函数所使用的。
它的有效范围是定义开始到本源文件结束。

在这里插入图片描述

全局变量与局部变量同名在这里插入图片描述

局部变量的存储类别

1. 自动变量
	用 auto 关键字声明。
	也可以不写auto,默认隐含为自动存储类别。
	函数中的形参和局部变量都属于此类型。在调用函数时,系统自动给变量分配存储空间,在调用结束时会自动释放此空间。
	int f(int a){
		auto int b,c=3;
	}
	
2. 静态局部变量
	用 static 关键字声明。
	希望在函数中的局部变量在结束后不消失而继续保留原值,即占用的存储空间不变,在下一次调用时,可以继续使用其值,这个时候就需要使用局部静态变量来声明。

3.寄存器变量
	用 register 关键字声明。
	一般来说静态变量、动态变量都谁存储在内存中,每次用某个变量的值,都会先从内存中取出来,送到计算器,如果需要存数,在存到内存中。次数太多的话,10000次循环?这个过程就太耗费时间,为提高效率,可以吧这些变量存到cpu的寄存器中,需要时直接从寄存器取,因为寄存器的读取比内存读取快很多,所以这些变量就叫寄存器变量。
	如:
	register int a;

在这里插入图片描述

全局变量的存储类别:

全局变量都是存放在静态存储区的,它的生命周期是固定的,存在于整个程序运行中。只是其作用于需要看不同的存储类别。如以下几种情况
声明为外部变量 用 extern 关键字。
声明为进本文件可用  用 static 关键字

1. 在一个文件内部扩展外部变量的作用域
2. 将外部变量的作用域扩展到其他文件
3. 将外部变量的作用于限制在本文件内

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坦桑尼亚奥杜威峡谷能人

感谢您的认可

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值