C语言--函数-变量

32 阅读2分钟

根据定义变量的位置,变量可分为全局变量和局部变量。局部变量和全局变量在内存中的储存位置不同,作用范围也有差异。

一、局部变量

定义在函数内部的变量称为局部变量,局部变量的作用区域仅限于函数内部,在函数执行完毕后,局部变量就会失去作用。示例:

int qw(){
    int a=1;    // qw()函数中的局部变量
    return 0;
}
int main(){
    int a=2;    // main()函数中的局部变量
    int b=qw();
    printf("a=%d,b=%d\n",a,b);
    return 0;
}

运行结果:

a=2,b=1

注:"{}" 起到分化代码块的作用,可以使一个函数中使用同名变量。示例:

int main(){
    //代码块
        {
            int a=2;
            printf("a=%d\n",a)
        }
        
    //代码块
        {
            int a=3;
            printf("a=%d\n",a)
        }
        return 0;
}

运行结果:

a=2
a=3

二、全局变量

在所有函数(包括main()函数)外定义的变量都称为全局变量,它不属于某个函数,属于源程序。所以它能被程序中的所有函数使用,它的有效范围从定义处到源程序结束。

注:在同一个文件中,全局变量与局部变量同名,则全局变量会被屏蔽,在程序的局部使用局部变量保存数据,示例:

int a=10;     // 全局变量a
int main(){
    {
        int a=5;       // 局部变量a
        printf("a=%d",a);       // 全局变量a被屏蔽
    }       // 局部变量a失效
    printf("a=%d\n",a);       // 全局变量a生效
    return 0;
}       // 全局变量a失效

三、示例案例:“远水不救近火”

#include <stdio.h>
#include <stdlib.h>
int water = 1;
void Ffire(int fire) {
	int water = 1;
	fire -= water;
}
void msg(int fire) {
	if (fire == 0)
		printf("火被扑灭啦!\n");
	else
		printf("警报尚未解除!\n");
}
int main() {
	int fire = 1;
	Ffire(fire);
	printf("“远水”救“近火”?");
	msg(fire);
	{
		int water = 1;
		int fire = 1;
		fire = water;
		printf("“远水”救“近火”?");
		msg(fire);
	}
	return 0;
}

运行结果:

image.png