C语言第七章 静态和动态储存

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//void funcTest(){
//	static int c = 4; //将C的值保留进去 静态局部变量 
//	printf("c = %d\n",c);
//	c++;
//	return;
//} 
extern int g_a; //对外部变量作说明

int main(int argc, char *argv[]) {
	
	//变量的储存和引用 内部和外部刺激 
	
	//变量的存储类别
	//从变量存在的时间(生存期)角度来划分的话 我们可以把变量划分为 静态存储变量和动态存储变量//从而引出了静态存储方式和动态存储方式 
	
	//静态存储变量:在程序运行期间分配固定存储空间的变量 这种分配变量的方式叫做静态储存方式 
	//动态存储变量:在程序运行期间根据需要进行动态分配存储空间的变量 这种分配方式叫做动态分配方式 
	
	//全局变量(在函数的外部定义的)放在静态存储区中 程序开始执行的时候给全局变量分配存储区 程序执行完毕后释放这些存储区 
	//在程序执行过程中 他们占用的是固定的存储单元 而不是动态的分配和释放 
	
	//动态存储区中存哪些数据呢?
	//a 函数存的是函数形参 函数形参被看成局部变量 
	//b 局部变量 比如函数内部定义的临时的变量  
	//c 函数调用时现场的一些数据和返回地址 
	//这些数据在函数调用时开始分配储存空间 调用完毕时这些空间就被释放掉了 这种分配和释放 我们就认为是动态的 
	
	//我的理解:
	//全局变量 这种一直存在的就是会被分配到静态存储区
    //局部变量 这种被调用才会被分配地址内存的才会被分到静态存储区
		//而且如果两次调用同一函数,分配给此函数的局部变量等等的存储空间地址 可能就是不同的
	
	//局部变量的存储方式:
 	//a 传统情形
	//函数的局部变量:函数被调用时分配存储空间 函数执行完成后自动释放其所占用的存储空间
	//b 特殊情形 
	// 局部静态变量:用static加以说明: 能够保留原值 占用的存储单元不释放。在下一次调用该函数时 该函数的值 就是上一次该函数吧调用时结束的值  
//	funcTest();
//	funcTest();
//	funcTest();
	
	//局部静态变量说明:
	//A 在静态存储区内分配存储单元 程序整个运行期间不释放 
	//B 局部静态变量是在编译时赋予初值的 而且只赋予一次初值 它已经有了初值 
			//每次调用函数时不再重新赋初值 而是保留上次函数调用结束时的值(static的情况下)
			//(普通的局部变量的定义和赋值在调用时进行的) 
	//C定义局部静态变量时。则编译时自动赋初值为0 
			//常规变量时 不服初值时 则该普通局部变量是一个不确定的值
	//D虽然局部静态变量在函数调用结束后值仍然存在 但其他函数是不能引用他的
	//缺点:长期占用内存 降低了程序的可读性
	//结论:除非必要 否则不要多用局部静态变量 
	
	
	//三:全局变量跨文件引用
	//一个项目中只能有一个main函数
	//extern 做一个外部变量说明
	//在引用该全局变量中的头部做一个"外部变量说明"就可以。说明这里出现的变量是一个已经在其他文件中定义过得外部变量
	//本文件中不必再分配内存
	printf("g_a = %d\n",g_a);
	//return; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值