韩顺平-变量的作用域

局部变量作用域仅限于函数中
当局部变量与全局变量发生冲突时,函数以局部变量为准。
在一个代码块中,比如:for, if的局部变量,这个变量的作用域就在此代码块中。
局部变量,系统不会默认对其进行初始化,全局变量会。指针的初始化是NULL
全局变量占用静态的存储单元,保存在内存的全局存储区中,局部变量保存在栈中
在同一个作用域,变量名不能重复。在更小的作用域,可以与稍大的作用域重复变量名

#include <stdio.h>
double price =200;
double price1 = 200;
void test01() {
	printf("%d,%f\n", price, price1);
}
void test02() {
	int price = 250;//重新声明了一个局部变量
	price1 = 201;//并未重新声明,修改的是全局变量的price1的值
	printf("%d, %f\n", price, price1);
}
void main() {
	printf("price=%f\n", price);
	test01();
	test02();
	test01();
}

C语言内存分布


  • 局部变量

  • malloc(unsigned int size),动态分配的数据
  • 静态存储区/全局区
    全局变量
    静态数据
  • 代码区
    存放代码

static关键字

变量

静态局部变量,编译器会对其进行初始化,为0
存储在静态存储区(全局性质)只会被初始一次,即使函数返回,它的值不变
普通全局变量对整个工程可见,其他文件可以使用extern外部声明后直接使用,但其它文件不能再定义重名的变量;静态全局变量仅对当前文件可见,其他文件不可访问,但是可以定义与其同名的变量。
在一个文件中使用另一个文件的全局变量,用extern来引入:extern int num;
定义不需要与其他文件共享的全局变量时,用静态全局变量

#include <stdio.h>
//void main() {
//	static int n;//系统默认初始化为0
//	}
void fn(void) {
	int n = 10;
	printf("n = %d, ", n);
	n++;
	printf("n++ = %d\n", n);
}
void fnStatic(void) {
	static int n = 10;
	printf("static n = %d, ", n);
	n++;
	printf("n++ = %d\n", n);
}
int main(void) {
	fn();
	fnStatic();
	fn();
	fnStatic();//再次调用后,static n已经初始化过,不会再进行初始化,也就是值会从11开始  
	return 0;
}

函数

在一个文件中使用另一个文件的函数,用extern来引入:extern int function(
static关键字修饰函数,函数便不能被其他文件引入static int function()
不同的文件可以使用相同名字的静态函数,互不影响。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值