C语言变量的作用域

本文详细介绍了C语言中的变量作用域,包括局部变量、全局变量以及形参的作用。强调了作用域规则,如编译器的就近原则,以及变量初始化的重要性。通过示例代码解释了全局变量和局部变量的区别,并展示了如何在不同作用域中使用和修改变量的值。

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

变量作用域(变量的有效范围)        

  • 函数内部声明/定义的局部变量,作用域仅限于函数内部
  • 函数的参数(形式参数)

        形式参数被当作该函数内的局部变量,如果与全局变量同名,它们会优先使用局部变量(编译器使用就近原则)

  •  在一个代码块,比如for/if中的局部变量,那么这个变量的作用域就在该代码块
  • 在所有函数外部定义的变量叫全局变量,作用域在整个程序有效

初始化局部变量和全局变量

  • 局部变量,系统不会对其默认初始化,必须对局部变量初始化之后才能使用。
  • 全局变量,系统会自动对其初始化

作用域的注意事项和细节

  • 全局变量保存在内存的全局存储区中,占用静态的存储单元,它的作用域默认是整个程序,也就是所有的代码文件,包括源文件(.c文件)和头文件(.h文件)
  • 局部变量保存在栈中,函数被调用时才动态地为变量分配存储单元,它的作用域仅限于函数内部
  • C语言规定,只能从小的作用域向大的作用域中去寻找变量,不能使用更小作用域中的变量
  • 在同一个作用域,变量名不能重复,在不同的作用域,变量名可以重复,编译器采用就近原则
#include <stdio.h>
double price  = 200.0; //全局变量
void test01() {
	printf("%.2f \n", price); // 就是 全局变量 : 200.0
}
void test02() { //编译器采用就近原则

	price = 250.0;//此时修改的是全局变量

	double price = 250.0;  // 如果把 这句话 改成 double price = 250.0 , 输出有什么变化?
	printf("%.2f \n", price); // 250.0
}
void main() {//main函数
	printf("main price=%.2f \n", price); // 200.00
	test01(); // 200.0
	test02(); // 250.0 ,  将 全局price 改成 250
	test01();//  200.0
	getchar();
}
若price直接修改,则修改的是全局变量
若double price = 250; 则是重新又定义了一个局部变量
#include <stdio.h>

int n = 10;  //全局变量
void func1(){
    int n = 20;  //局部变量
    printf("func1 n: %d\n", n); //
}
void func2(int n){
    printf("func2 n: %d\n", n); // n 是 形参 n
}
void func3(){
    printf("func3 n: %d\n", n); //n 是全局变量 n
}
int main(){
    int n = 30;  //局部变量(main函数)
    func1(); // 20
    func2(n); // 30
    func3(); //10
    //代码块由{}包围
    {
        int n = 40;  //局部变量{}
        printf("block n: %d\n", n); // 40
    }
    printf("main n: %d\n", n); // 30
	getchar();
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值