关于局部变量,形式参数和全局变量在代码块中的作用域

本文探讨了编程中不同类型的变量——局部变量、形式参数和全局变量的作用域。局部变量在函数或代码块内部创建,随着代码块的结束而销毁。形式参数作为函数输入,同样局限于函数内部。全局变量则在整个代码范围内有效,但在局部作用域中如果与局部变量同名,会优先使用局部变量。

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

局部变量:在函数内部(代码块内部)声明的变量,也称为“自动变量”,进入代码块创建,退出代码块销毁

#include<stdio.h>
int fun()
{
	int a = 19;
	{
		int a = 20;
		{
			int a = 21;
			printf("%d\n", a);    //21,局部优先,但只在当前代码块起作用,出代码块就销毁。
		}
		printf("%d\n", a);     //20,局部优先,但只在当前代码块起作用,出代码块就销毁。

		return a;
	}
}
int main()
{
	int word = 0;
	int a=0;
	word = fun(a);
	system("pause");
	return 0;
}
#include<stdio.h>
#include<stdlib.h>
int main()
{
	printf("hello\n");
	int num = 20;       //(不同平台下可能会)出现error,C语言中变量声明必须放在在当前代码块的最前面,不是所有代码块的最前面
	printf("%d", num);
	system("pause");
	return 0;
}
在局部变量之前加上static(静态变量)放在不同的位置:

#include<stdio.h>
void fun()
{
	int i = 0;
	static int num = 0;
	for (i = 0; i < 10; i++)
	{
		num++;
		printf("%d\n", num);  //1,2,3,4,5,6,7,8,9,10
	}
}
int main()
{
	fun();
	system("pause");
	return 0;
}
#include<stdio.h>
void fun()
{
	int i = 0;
	
	for (i = 0; i < 10; i++)
	{
		static int num = 0;  //初始化num,只执行一次,num是一个静态变量,创建后不再销毁,直到程序当前代码块结束
		num++;
		printf("%d\n", num);  //1,2,3,4,5,6,7,8,9,10
	}
}
int main()
{
	fun();
	system("pause");
	return 0;
}
<pre class="objc" name="code">#include<stdio.h>
void fun()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		int num = 0;     num是局部变量,每次进入循环时创建,出代码块时销毁
		num++;
		printf("%d\n", num); //1,1,1,1,1,1,1,1,1,1
	}
}
int main()
{
	fun();
	system("pause");
	return 0;
}


#include<stdio.h>
void fun()
{
	int i = 0;
	static int num = 0;
	for (i = 0; i < 10; i++)
	{
		num = 0;   //赋值,不管num的值是多少,进入循环后,每次都会被赋值为0.
		num++;
		printf("%d\n", num); 1,1,1,1,1,1,1,1,1,1
	}
}
int main()
{
	fun();
	system("pause");
	return 0;
}
#include<stdio.h>
int main()
{
	void fun(void);
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		fun();   //调用fun函数,j是局部变量,调用一次,销毁一次,每次调用,重新创建
	}
	printf("\n");
	system("pause");
	return 0;
}
void fun(void)
{
	int j = 0;
	j++;
	printf("%d ", j);   //1,1,1,1,1,1,1,1,1,1
}
#include<stdio.h>
int main()
{
	void fun(void);
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		fun();  //j是一个静态变量,创建后,直到程序当前代码块结束时销毁
	}
	printf("\n");
	system("pause");
	return 0;
}
void fun(void)
{
	static int j = 0;
	j++;
	printf("%d ", j);  //1,2,3,4,5,6,7,8,9,10
}
#include<stdio.h>
int main()
{
	void fun(void);
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		fun();
	}
	printf("\n");
	system("pause");
	return 0;
}
static int j = 0;
void fun(void)
{
	j = 0;   //赋值,每次调用都会给j赋值为1
	j++;
	printf("%d ", j);    //1,1,1,1,1,1,1,1,1,1
}   

形式参数:把定义声明在函数参数里面,也相当于局部变量,只对当前代码块起作用。使用完成后自动销毁

#include<stdio.h>
int is_in(char *s, char c)  //*s和c都属于形式参数
{
	while (*s)
	if (*s == c)
	{
		printf("exist");
		return 1;
	}	
	else
	{
		s++;
	}
		
	return 0;
}
int main()
{
	char *p = "abcdef";
	char c = 'd';
	is_in(p, c);
	system("pause");
	return 0;
}

全局变量:所有在代码块之外({}大括号之外)定义的变量,当全局变量与局部变量冲突时,局部优先。

#include<stdio.h>
int a = 20;
int b;    //声明
int fun1()
{
	printf("b=%d", b);  //20
	return 0;
}
int b = 30;  //定义,b在所有代码块的外部,是一个全局变量,对程序所有代码块起作用,所以fun1可以调用,但需要提前声明
int fun2()
{
	return 1;
}
int main()
{
	fun1();
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值