C语言学习系列十九——局部和全局变量

局部变量

保证了函数的独立性

  • 定义在函数内部的变量
  • 还允许定义作用再复合语句中的局部变量
  • 一般定义在函数或复合语句开头处

全局变量

  • 定义在函数外而不属于任何函数的变量
  • 一般定义在函数的最前面
  • 但局部变量和全局变量重名时,在函数内部以局部变量为准
例5-7
#include<stdio.h>
int x;
int f();
int main()
{
	int a=1;
		
	x=a;		//全局变量x 
	a=f();
	{
		int b=2;
		b=a+b;		//局部变量运算 
		x=x+b;		//全局变量运算 
			
	}
	printf("%d %d ",a,x);
		
	return 0;
}

int f()
{
	int x=4;		//x为局部变量 
	
	return x;
}
4 7
例5-8
#include<stdio.h>
float cash;
void income(float number),expend(float number);
int main()
{
	int choice;
	float value;
	
	cash=0;
	printf("Enter (0-end,1-income,2-expend):");
	scanf("%d",&choice);
	while(choice!=0){
		
		if(choice==1||choice==2){
			printf("Enter cash value:" );
			scanf("%f",&value);
			if(choice==1)
			  income(value);
			else
			  expend(value);
			printf("current cash:%.2f\n",cash);
			
		}
		printf("Enter (0-end,1-income,2-expend):");
		scanf("%d",&choice);
		
	}
	
	return 0;
 } 
 
 void income(float number) 
 {
 	cash=cash+number;
 }
 
 void expend(float number)
 {
 	cash=cash-number; 
 }
Enter (0-end,1-income,2-expend):1
Enter cash value:1000
current cash:1000.00
Enter (0-end,1-income,2-expend):2
Enter cash value:456
current cash:544.00
Enter (0-end,1-income,2-expend):0

变量生存周期

变量从定义开始分配储存单元,到运行结束存储单元被回收

根据这种特性,局部变量又称为自动变量

例如:auto int x,y;   auto可以省略。

变量存储的内存分布

动态存储区是是使用堆栈来管理的

静态变量

存放在静态存储区,它的生命周期会持续到程序结束。

stastic     类型名     变量表

例5-9
#include<stdio.h>
double fact_s(int n);
int main()
{
	int i,n;
	printf("Input n: ");
	scanf("%d",&n);
	
	for(i=1; i<=n; i++)
	printf("%3d!=%.0f\n",i,fact_s(i));
	
	return 0;
	
 } 
 double fact_s(int n)
 {
 	static double f=1;			//定义静态变量 
 	f=f*n;						//调用上次的值再乘以n 
 	
 	return (f);
 	
 }
Input n: 6
  1!=1
  2!=2
  3!=6
  4!=24
  5!=120
  6!=720
练习5-2
//将f定义成全局变量可以实现n!
#include<stdio.h>
int f=1;
double fact_s(int n);
int main()
{
	int i,n;
	
	printf("Input n: ");
	scanf("%d",&n);
	
	for(i=1; i<=n; i++)
	printf("%3d!=%.0f\n",i,fact_s(i));
	
	return 0;
	
 } 
 double fact_s(int n)
 {
 			
 	f=f*n;					
 	
 	return (f);
 	
 }

Input n: 6
  1!=1
  2!=2
  3!=6
  4!=24
  5!=120
  6!=720

//把f换成普通局部变量不能实现n!,因为它不能像静态局部变量一样调用上一次的函数值
#include<stdio.h>
double fact_s(int n);
int main()
{
	int i,n;
	printf("Input n: ");
	scanf("%d",&n);
	
	for(i=1; i<=n; i++)
	printf("%3d!=%.0f\n",i,fact_s(i));
	
	return 0;
	
 } 
 double fact_s(int n)
 {
 	int f=1;			
 	f=f*n;						 
 	return (f);
 	
 }

Input n: 6
  1!=1
  2!=2
  3!=3
  4!=4
  5!=5
  6!=6

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值