C语言深度剖析1.0

运行:文本代码-->可执行程序(二进制文件).exe->双击启动该程序

win中鼠标双击程序-->将程序加载到内存中(任何程序咋运行之前都必须加载到内存当中【速度快】)

程序未加载之前 都在硬盘中

所有的变量本质是在 内存 的某个位置开辟空间,用来保存数据。

为什么需要变量?

因为有数据需要暂时被保存起来,等待后续的处理。任何时刻不是所有数据都要立马被计算的。

定义与声明

定义:开辟空间,(只能定义一次)

声明:告知 已经定义(可声明多次)

auto

生命周期vs作用域(开辟到释放)

声明周期 是作用时间长短

作用域 是作用范围大小有效区域

局部与全局变量

代码块:用{}括起来的区域

局部变量:在代码块中的变量,有临时性。进入代码块,自动形成局部变量,突出代码块自动释放

(生命周期)只在本代码块中有效。

一般在代码块中定义的变量,即局部变量,默认都是auto修饰的,不过一般省略

局部变量,自动变量,临时变量,都是一回事。我们统称局部变量

全局变量:在所有函数外定义的变量,具有全局性。

(若局部全局变量命名冲突则 局部优先)

如 以下for循环代码,是打印不出来i的值的,因为出了循环体i的生命周期就结束了

#include <stdio.h>
#include <windows.h>
int main()
{
for (int i = 0; i < 10; i++){
}
printf("i=%d\n", i);
system("pause");
return 0;
}

以下if语句中的j就可以打印出来        (定义局部变量前可用outo来修饰,但一般省略)

#include <stdio.h>
int main()
{
if(1)
{
auto int j = 0; //自动变量
printf("before: j=%d\n", j);
j += 1;
printf("after : j=%d\n", j);
}

auto只能修饰局部变量,不能修饰全局变量。(基本不用了但是要了解)

register

建议性的,将所修饰变量,放入CPU寄存区中,从而达到提高效率的目的

存储分级

离CPU越近的储存单元,效率高成本高,反之效率低成本低。

下游(如硬盘)加载到 上游(如内存)——>缓存技术

任何一种硬件充当上游硬件的缓存

CUP访问数据的时候,以最小的成本,达到最高的效率

常用的数据放在容量小但访问速度快的硬件里如CPU,把不常用的数据放在容量大的硬盘里,以降低成本

那么什么样的变量,可以采用register呢?

1. 局部的 (全局会导致CPU寄存器被长时间占用) 

2. 不会被写入的(不会被修改的)(写入就需要写回内存,后续还要读取检测的话失去存在意义)

(但是如果想修改被修饰变量的话也可以修改,但是不建议修改)

写入叫上游硬件(如CPU)返回下游硬件(如内存)会改变原来的值)

3. 高频被读取的(被用得多)(提高效率所在)

4. 如果要使用,请不要大量使用,因为寄存器数量有限

注意:被register修饰的变量是没有地址的,取不了地址 (地址对应内存)

                                下期再见!勿忘三连!

  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

补集王子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值