首页 > 系统相关 >初学C语言day06--进程影响及类型限定符

初学C语言day06--进程影响及类型限定符

时间:2023-07-28 15:37:42浏览次数:45  
标签:初始化 变量 -- 局部变量 day06 C语言 num 内存 全局变量

进程映像:

程序:存储在磁盘上的可执行文件(二进制文件、脚本文件)
进程:正在系统中运行的程序
进程映像:进程的内存分布情况:
text 代码段 存储二进制指令、常量,只读的,如果强行修改会产生段错误
data 数据段 初始化过的全局变量、初始化过的静态局部变量
bss 静态数据段 未初始化过的全局变量、未初始化过的静态局部变量,程序运行前会自动清理为0
stack 栈 局部变量、块变量,由操作系统管理,会随着程序运行自动申请、释放,内存较小
heap 堆 由程序员手动申请的内存,程序员手动管理,缺点:使用麻烦,优点:足够大

局部变量和全局变量:

全局变量:定义在函数外
存储位置:data(初始化)或者bss(未初始化)
生命周期:main运行前定义完成开始直到程序结束
使用范围:程序的任何位置都可以使用
局部变量:定义在函数内
存储位置:stack 栈内存
生命周期:函数调用时定义完成后开始直到函数执行结束
使用范围:只能在函数内使用
块变量:定义在语句块内(if\for\while...)
存储位置:stack 栈内存
生命周期:函数调用时定义完成后开始直到语句块执行结束
使用范围:只能在语句块内使用
注意:局部变量可以和全局变量同名,因为会屏蔽同名的全局变量,同名的块变量会屏蔽同名的局部变量、全局变量
建议全局变量首字母大写,局部变量、块变量小写

类型限定符:
auto

用于定义自动分配、自动释放内存的变量(局部变量),不加就代表加了
注意:全局变量不能用auto修饰
C11 标准中用于自动类型识别
auto num = 3.14;

extern

声明外部变量,告诉编译器此变量已经在别的地方定义了,请放心使用
int num; // a.c
extern int num; // b.c 可以使用 a.c中的全局的num
注意:extern只能临时通过编译阶段,链接时如果找不到变量的定义依然会报错
注意:不要对变量声明赋值

static

改变存储位置:
改变局部变量的存储位置,由stack改为data(初始化)或者bss(未初始化)
被static修饰过的局部变量称为静态局部变量
延长生命周期:
延长局部变量的生命周期
限制作用范围:
限制全局变量、函数只能在本文件内使用
目的是防止全局变量、函数名命名冲突、也可以防止被别人乱调用

const

"保护"变量不被显式地修改
但是,如果对 初始化过的全局变量、静态局部变量用const修饰,存储位置会从data改为text,变成只读的"常量",强制修改会段错误
volatile
前提:C编译会对变量的值进行取值优化:如果一个变量的值没有显式地改变,当再次使用该变量时不会从内存中读取,而是继续使用上一次的结果
变量被volatile修饰后,编译器不再对该变量进行取值优化,也就会每次使用该变量时,都会从内存中读取一次

   int num = 10;
   if(num == num)  //恒为真   
   {
   }

    volatile int num = 10;
    if(num == num)  // 可能为假
    {

    }


register

申请把变量的存储介质由内存改为寄存器,但是数量有限不一定都能成功
存储介质:硬盘->内存->高速缓存->寄存器
注意:寄存器变量不能取地址

typedef

类型重定义,如果在定义变量时类型前面加上typedef,变量名就变成这种类型
typedef int num;
#define num int

标签:初始化,变量,--,局部变量,day06,C语言,num,内存,全局变量
From: https://www.cnblogs.com/bigflyny/p/17587672.html

相关文章

  • Spire.OCR for .NET
    概述Spire.OCRfor.NET 是一款专业的OCR(图文识别)组件,用以读取JPG、PNG、GIF、BMP和TIFF等图片格式中的文本。利用该组件,开发人员可以用C#和VB.NET创建的.NET应用程序来实现OCR功能。Spire.OCRfor.NET的用法简易,仅需一小串C#或VB.NET的代码,便可轻松读......
  • portal连接ldap
    #!/bin/bashset-exsu-ccp_master<<'EOFCC'cat>ldaptoportal.sh<<'EOFG'keystore_pd="[email protected]"ldapAdmin_pd="huawei@123"ldapadmin="root"LANG="en_US.UTF-8"cd/opt/hu......
  • 不定高度的过渡动画
    方法1 max-height,效果一般方法2clip-path:inset,支持transition.content{...height:auto;clip-path:inset(00100%0);}.fold:hover.content{clip-path:inset(0);}方法3grid布局中的fr,支持transition,但是需额外套一层容器,兼容chrome(107+),......
  • element-ui中的change事件传递多个参数的方法
    相关小例子(比如,我想要目前的选中值和index)<el-selectv-model="value"placeholder="请选择"><el-optionv-for="(item,index)inoptions":key="item.value":label="item.label":value="i......
  • 数据大屏web开发讲解
     数据大屏web开发讲解 前端大屏开发在项目中也比较常用,这里就有针对性的讲解一下。前端框架用的是vue。 大屏开发技术点:1. 可视化图表库echarts 。灵活应用。解决90%的大屏效果。2. SVG,大屏不失真。设计图的高还原度3. 数据动态效果。css动画。4. 大屏的适配......
  • spool命令使用详解 oracle导出txt文件
    spool命令使用详解原文链接:https://www.xjx100.cn/news/454608.html?action=onClickSPOOL命令使用详解SPOOL是SQLPLUS的命令,必须在SQLPLUS中使用,主要完成以标准输出方式输出SQLPLUS的命令及执行结果,一般常用户格式化导出ORACLE表数据。 对于SPOOL数据的SQL,最好要自己定......
  • 洛谷 P1347 排序 - 拓扑排序
    P1347排序题意依次给一些具有排序关系的序列,问你在能否在若干个序列之后确定元素的顺序、判断元素关系存在矛盾、判断无法确认元素顺序思路对于每一个排序关系均进行toposort,后面就是toposort判环(出现矛盾),toposort判顺序,无法确认唯一关系。详见代码或看洛谷题解区代码......
  • Prometheus的rate函数是怎么计算的(不太靠谱)
    Prometheus的rate函数是怎么计算的(不太靠谱)前言测试的数据类型是Counter类型,其他类型没测试,好像是类型改变了,rate函数的算法也变了抓取的原始数据抓取间隔是15s开始抓取到数据的时间是2023-07-2714:14:34第二个时间是2023-07-2714:14:49(第一个时间+15s)第三个时间是2023......
  • WIFI&蓝牙(ESP32)转CAN总线&串口TTL模块-A2-蓝牙和CAN总线透传通信(经典蓝牙主机)
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ESP32_CAN"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>          实现的......
  • Java学习1
    java学习01简单写写学习期间不知道or感兴趣的一些东西计算机相关前置知识计算机结构系统软件DOS(DiskOperatingSystem)WindowsLinuxUnix,Mac,Android,IOS...windows快捷键关闭窗口 ALT+F4永久删除文件Shift+Delete快捷指令win+R打开我的电......