《C语言深度解析》

1、双击程序时计算机发生了什么

①  在win中双击的在本质是运行程序,将程序加载到内存中

② 任何程序在被运行之前都必须被加载到内存中

两个问题:

①:程序未被加载到内存中放到了哪里?

②:为什么程序要被加载到内存?

 ①:程序未被加载到内存中放到了硬盘中

②:因为快

2、变量的定义和声明

1、什么是变量

变量是在内存中开辟的特定大小的空间,用来保存数据

关键字:内存

类型名 变量名 ;

2、为什么要定义变量

因为大量数据在CPU处理时并不是一次性全部进行处理,所以一部分数据需要被暂时保存起来,等待后续处理

(变量的定义是在内存中开辟空间,只能开辟一次,而变量的声明使用来告知存在此变量,声明可以多次进行)

3、最宽宏大量的关键字auto

首先需要了解全局变量和局部变量,生命周期,作用域

局部变量:

#include<stdio.h>
int main()
{
int a=0;//a是局部变量

return 0;
}

局部变量只在本代码快中有效,出了本代码块该内存空间被释放

全局变量:

#include<stdio.h>
int a=10;//a 为全局变量,从此处定义起有效,到程序结束
int main()
{

printf("%d",a);
return 0;
}

全局变量在整个程序期间都有效

生命周期:指该变量从定义到被释放的时间范围,(描述存在时间长短)

作用域:该变量影响的范围

注:当全局变量和局部变量名一样时:局部变量优先

auto修饰局部变量,而在编程中auto都省略了,也就是在局部变量之前都被auto修饰 

3、最快的关键字register

存储分级

 ①:离CPU跃进的的存储单元,效率越高,单价成本越贵

②:对于以上任何一种硬件而言,都是冲当上游硬件的缓存

用register修饰尽量将所修饰的变量放在CPU寄存区,从而提高了效率

注意:register修饰的变量不能取地址(因为地址是对于内存而言)

4、最名不副实的关键字static

两个问题:

①:全局变量可以跨文件访问吗?

②:函数可以跨文件访问吗?

 

 

 

 

 由上面三张图可以看见全局变量和函数都可以跨文件访问,但是第四张可以看出函数的还是报了个提醒

那为什么他们没声明却可以跨文件使用?

因为在有一定规模的项目,一定是多文件的,多个文件之间后续一定要进行数据的“交互”,如果不能跨问价,“交互”成本高

那如果用static修饰呢

 

 同样的代码用static修饰全局变量之后就不可以跨文件使用了

因此可以得到结论:①:static修饰全局变量,该变量只在本文件内被访问,不能被外部其他文件直接访问

那static修饰局部变量会发生什么?

#include<stdio.h>
int  ex()
{
	int i = 0;
	 int a = 0;
		a++;
	return a;
}
int main()
{
	int p,i;
	for (i = 0; i < 10; i++)
	{
		p = ex();
		printf("%d", p);
	}
	return 0;
}

 

#include<stdio.h>
int  ex()
{
	int i = 0;
static int a = 0;
		a++;
	return a;
}
int main()
{
	int p,i;
	for (i = 0; i < 10; i++)
	{
		p = ex();
		printf("%d", p);
	}
	return 0;
}

 

 由上面两段代码可见仅仅加了一个static,运行的结果是完全不同的,当局部变量a的前面加了static时,结果是中10是由a=9,a++得到的,a=9又是由a=8,a++得到的,所以与第一种运行相比较,a的值在函数运行之后不会销毁

由此得出结论:②:static修饰局部变量,更改局部变量的生命周期(但作用域不变:还是在本代码块中,在其他代码块中会显示未定义)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值