C语言-变量

news2024/11/28 10:48:40
1 内存的分区
1、内存:物理内存、虚拟内存
物理内存:实实在在存在的存储设备
虚拟内存:操作系统虚拟出来的内存。
操作系统会在物理内存和虚拟内存之间做映射。
在32位系统下,每个进程的寻址范围是4G,0x00 00 00 00 ~0xff ff ff ff
在写应用程序的,看到的都是虚拟地址。
32 位操作系统中,虚拟内存被分为两个部分, 3G 的用户空间和 1G 内核空间,其中用户空间是当前进程所私有的,内核空间,是一个系统中所有的进程所公有的
2、在运行程序的时候,操作系统会将 虚拟内存进行分区
1).堆
在动态申请内存的时候,在堆里开辟内存。
2).栈
主要存放局部变量。
3).静态全局区
1:未初始化的静态全局区
静态变量(定义变量的时候,前面加static修饰),或全局变量 ,没有初始化的,存在此区
2:初始化的静态全局区
全局变量、静态变量,赋过初值的,存放在此区
4).代码区
存放程序代码
5).文字常量区
存放常量的。
2 普通的全局变量
概念:
在函数外部定义的变量
int num=100;//num就是一个全局变量
int main()
{
return 0;
}
作用范围:
全局变量的作用范围,是程序的所有地方。
只不过用之前需要声明。声明方法 extern int num;
注意声明的时候,不要赋值。
生命周期:
程序运行的整个过程,一直存在,直到程序结束。
注意:定义普通的全局变量的时候,如果不赋初值,它的值默认为0
        
1 # include <stdio.h>
2
3 // 定义一个普通全局变量
4 // 只要是在 main 函数外(也在子函数外)的变量,就是全局变量
5 // 如果全局变量没有进行初始化,则系统自动将其初始化为 0
6 int num ;
7
8 // 全局变量可以在程序的任意一个位置进行对其的操作
9 void myfun ()
10 {
11 num = 888 ;
12 }
13
14 int main ( int argc , char * argv [])
15 {
16 printf ( "num = %d\n" , num );
17
18 myfun ();
19
20 printf ( "num = %d\n" , num );
21
22 return 0 ;
23 }
3 静态全局变量
概念:
定义全局变量的时候,前面用static 修饰。
static int num=100;//num就是一个静态全局变量
int main()
{
return 0;
}
作用范围:
static 限定了静态全局变量的作用范围
只能在它定义的.c(源文件)中有效
生命周期:
在程序的整个运行过程中,一直存在。
注意:定义静态全局变量的时候,如果不赋初值,它的值默认为0
1 # include <stdio.h>
2
3 // 定义一个静态全局变量
4 // 静态全局变量只能在其定义的 .c 文件中任意位置使用,不能跨文件使用
5 static int num ;
6
7 void myfun ()
8 {
9 num ++ ;
10 }
11
12 int main ( int argc , char * argv [])
13 {
14 printf ( "num = %d\n" , num );
15
16 myfun ();
17
18 printf ( "num = %d\n" , num );
19
20 return 0 ;
21 }
4 普通的局部变量
概念:
在函数内部定义的,或者复合语句中定义的变量 int main()
{
int num;//局部变量
{
int a;//局部变量
}
}
作用范围:
在函数中定义的变量,在函数中有效
在复合语句中定义的,在复合语句中有效。
生命周期:
在函数调用之前,局部变量不占用空间,调用函数的时候,
才为局部变量开辟空间,函数结束了,局部变量就释放了。
在复合语句中定义的亦如此。
1 # include <stdio.h>
2
3 // 定义一个局部变量
4 // 在函数内部定义的,不加任何修饰的变量都是局部变量
5 void myfun ()
6 {
7 int num = 100 ;
8 num ++ ;
9
10 printf ( "num = %d\n" , num );
11
12 return ;
13 }
14
15 int main ( int argc , char * argv [])
16 {
17 // 局部变量只能在定义的函数内部使用,声明周期相对较短,函数结束,局部变量就会释放
18 //printf("num = %d\n", num);
19 myfun ();
20 myfun ();
21 myfun ();
22
23 return 0 ;
24 }
5 静态的局部变量
概念:
定义局部变量的时候,前面加static 修饰
作用范围:
在它定义的函数或复合语句中有效。
生命周期:
第一次调用函数的时候,开辟空间赋值,函数结束后,不释放,
以后再调用函数的时候,就不再为其开辟空间,也不赋初值,
用的是以前的那个变量。

 

1 # include <stdio.h>
2
3 // 定义一个静态局部变量
4 // 在函数内部定义的使用 static 修饰的变量就是静态局部变量
5
6 void myfun ()
7 {
8 // 如果普通局部变量不进行初始化,则默认是随机值
9 // 如果静态局部变量不进行初始化,则默认是 0
10 int a ; // 普通局部变量
11 static int num ; // 静态局部变量
12
13 printf ( "a = %d\n" , a );
14 printf ( "num = %d\n" , num );
15 }
16
17 void myfun1 ()
18 {
19 // 静态局部变量不会随着当前函数执行结束而释放空间,下次使用的函数之前的空间 20 // 静态部变量只会初始化一次
21 static int num1 = 100 ;
22 num1 ++ ;
23
24 printf ( "num1 = %d\n" , num1 );
25 }
26
27 int main ( int argc , char * argv [])
28 {
29 myfun ();
30
31 myfun1 ();
32 myfun1 ();
33 myfun1 ();
34
35 return 0 ;
36 }
注意:
1:定义普通局部变量,如果不赋初值,它的值是随机的。
定义静态局部变量,如果不赋初值,它的值是0
2:普通全局变量,和静态全局变量如果不赋初值,它的值为0
6 外部函数
定义的普通函数,都是外部函数。
即函数可以在程序的任何一个文件中调用。
在分文件编程中,只需要将函数的实现过程写在指定的.c文件中,然后将其声明写在指定的.h文件中,其他文件只要包含了头文件,就可以使用外部函数
7 内部函数 内部函数也称之为静态函数,就是用static修饰的函数
在定义函数的时候,返回值类型前面加static 修饰。这样的函数被称为内部函数。
static 限定了函数的作用范围,在定义的.c中有效。
内部函数和外部函数的区别:
外部函数,在所有地方都可以调用,
内部函数,只能在所定义的.c中的函数调用。
扩展:
在同一作用范围内,不允许变量重名。
作用范围不同的可以重名。
局部范围内,重名的全局变量不起作用。(就近原则)
1 int num = 100 ; // 全局变量
2 int main ()
3 {
4 // 如果出现可以重名的情况,使用的时候满足向上就近原则
5 int num = 999 ; // 局部变量
6
7 return 0 ;
8 }

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

和想要通过学习 Python 转行的同学聊一聊

在开始之前我想说&#xff0c;关于这类话题&#xff0c;永远会存在分歧和争论。比如有人看好互联网发展&#xff0c;有人说泡沫太大&#xff1b;有人说要做项目&#xff0c;有人说得多刷题&#xff1b;有人说要去培训班&#xff0c;有人说不如自学&#xff1b;有人说你学 Pytho…

【MySql】基本查询

文章目录 插入操作insert查询操作selectselect查询where条件判断order by排序limit筛选分页结果 更新操作update删除操作delete插入查询结果 CRUD : Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09; 先创建提供一张表&am…

给大家分享一份适合练手的软件测试实战项目

我们都知道软件测试是一个理论性强的分支。 正是这种特点&#xff0c;决定了在学习的过程中不单单是看或者去背相应的知识点&#xff0c;而是真真切切的基于这些理论基础知识&#xff0c;结合实战项目进行演练。这也就是所谓的眼过千遍不如手过一遍。而且大家也都能看到&#…

13. 100ASK-V853-PRO开发板 摄像头测试指南

100ASK-V853-PRO开发板 摄像头测试指南 硬件要求&#xff1a; 100ASK-V853-PRO开发板GC2053摄像头 软件要求&#xff1a; 固件下载地址&#xff1a;链接&#xff1a;百度网盘 提取码&#xff1a;sp6a 固件位于资料光盘中的10_测试镜像/3.测试摄像头/v853_linux_100ask_uart0…

119.【Uniapp】

uni-app (一)、uni-app 起步1.Uniapp简介2.Uniapp开发工具(1).下载HbuilderX(2).安装scss/sass编译(3).快捷键方案切换(4).修改编辑器的基本设置 3.新建 uni-app项目4.uniapp 的目录结构5.把项目运行到微信开发者工具中(1).填写自己的微信小程序的AppID:(2).在HBuilderX中&…

java循环语句

文章目录 for循环while循环do-while循环嵌套循环关键字break和continue的使用break带标签的使用 for循环 语法格式&#xff1a; for (①初始化部分; ②循环条件部分; ④迭代部分)&#xff5b;③循环体部分; &#xff5d;说明&#xff1a; for(;;)中的两个&#xff1b;不能多…

视觉SLAM十四讲——ch7实践(视觉里程计1)

视觉SLAM十四讲----ch7的实践操作及避坑 1. 实践操作前的准备工作2. 实践过程2.1 特征提取与匹配2.2 对极几何2.3 三角测量2.4 求解PnP2.5 求解ICP 3. 遇到的问题3.1 准备工作遇到的问题 1. 实践操作前的准备工作 在终端中进入ch7文件夹下&#xff0c;顺序执行以下命令进行编译…

Sentinel的限流和Gateway的限流差别?

Sentinel的限流与Gateway的限流有什么差别&#xff1f; 问题说明&#xff1a;考察对限流算法的掌握情况 限流算法常见的有三种实现&#xff1a;滑动时间窗口&#xff0c;令牌桶算法&#xff0c;漏桶算法。gateway则采用基于Redis实现的令牌桶算法。但是我们不会去用&#xff…

PCB做了盲埋孔,还有必要再做盘中孔工艺吗

一博高速先生成员--王辉东 初夏的西湖美艳无边&#xff0c;若不去看看人生总觉遗憾。 杭州两大美女明明和琪琪约好这个星期天&#xff0c;一起去西湖转转&#xff0c;到灵隐寺许个愿&#xff0c;再到北高峰爬个山。 话说两人正行之间&#xff0c;看到正对面也有两个美女结伴同…

Spring Security Oauth2.1 最新版 1.1.0 整合 gateway 完成授权认证(基于 springboot 3.1)

目录 背景 版本 Spring Boot 3.1 Spring Authorization Server 1.1.0官方文档 基础 spring security OAuth2.0 模块构成 授权方式 集成过程 官方demo 代码集成 依赖 授权服务AuthorizationServerConfig配置 重要组件 测试 查看授权服务配置 访问授权服务 授…

渗透测试与自动化安全测试工具比较

应用程序安全性并不新鲜&#xff0c;但它在需求、复杂性和深度方面正迅速增长。随着网络犯罪自疫情爆发以来增长了近600%&#xff0c;越来越多的SaaS企业开始争相保护他们的应用程序。即使那些运行最新端点保护的系统也面临重大漏洞。 然而随之而来的一个问题是&#xff1a;即…

【javaweb+springboot】旅游网页面设计(主购物车功能)——前后端分离+服务端客户端增删改查(完整代码+文档)

一、项目背景 由于疫情原因&#xff0c;张家界旅游业受到很大的影响&#xff0c;为了促进旅游业的发展&#xff0c;吸引更多游客来到张家界旅游&#xff0c;帮助游客更好地了解张家界&#xff0c;创建张家界旅游网&#xff0c;推进旅游发展大会的开展&#xff0c;展示当地风土人…

商城系统功能有哪些?

商城系统是一种以电子商务为基础的技术工具&#xff0c;为企业涉足电子商务提供了完整的解决方案。商城系统不仅可以帮助企业降低成本&#xff0c;提高效率&#xff0c;还可以实现全方位的在线营销&#xff0c;为企业争取更多的竞争优势&#xff0c;如SHOP、Magento等一系列成熟…

EBU5476 Microprocessor System Design 知识点总结_3 Assembly

Assembly 汇编语法。 顺序结构 label ; 可省略&#xff0c;用于跳转到此位置助记符 operand1, operand2, … ; CommentsMOV r1, #0x01 ; 数据0x01放入r1 MOV r1, #A ; 数据A的ascii码放入r1 MOV R0, R1 ; move R1 into R0 MOVS R0, R1 ; move R1 i…

当 GraphQL 遇上图数据库,便有了更方便查询数据的方式

人之初&#xff0c;性本鸽。 大家好&#xff0c;我叫储惠龙&#xff08;实名上网&#xff09;&#xff0c;你可以叫我小龙人&#xff0c;00 后一枚。目前从事后端开发工作。 今天给大家带来一个简单的为 NebulaGraph 提供 GraphQL 查询支持的 DEMO&#xff0c;为什么是简单的…

职业教育机构转线上时,选择平台要注意哪些方面?

职业教育是提升技能和知识的重要途径&#xff0c;有效的职业教育能够帮助培养和发展人才&#xff0c;相比较线下面授课程相比&#xff0c;在线直播的教学&#xff0c;可以节省较大成本&#xff0c;那么在选型直播平台时&#xff0c;要注意哪些方面呢&#xff1f; 1.需要实现高清…

记录一次使用__dirname和./引出的bug

JS项目中 保存本地生成的图片时使用的路径:__dirname“/waitToFinishTask.png"。 但是在获取这张图片的时候我使用的是“./waitToFinishTask.png”。 从而抛出异常&#xff1a;Error: ENOENT, No such file or directory ./waitToFinishTask.png 找了好久都不知道为什么会…

【无标题】windows下使用cmake编译c++

好久没有更新博客了 最近在做c相关的&#xff0c;编译起来确实很痛苦。 所以心血来潮&#xff0c;继续更新一下 主要还是一些跨平台的库&#xff0c;比如zlib、libpng、opencv、ffmpeg 编译工具使用mingw作为主要编译环境支持&#xff0c;使用msys进行编译。 一、下载mingw…

利用etcd实现分布式锁

python etcd3模块的lock使用 观察lock的加解锁影响 在python中已经自带了分布式锁的实现方式&#xff0c;下面我们尝试一下加锁与解锁的流程 在运行该demo同时也对lock对应的key进行watch&#xff0c;观察其变化&#xff0c;注意python-etcd3在实现分布式锁的时候&#xff0…

前端终止请求的三种方式(ajax、axios)

一、原生ajax终止请求 1、abort() ​ XMLHttpRequest.abort() 方法用于终止 XMLHttpRequest 对象的请求&#xff0c;该方法没有参数&#xff0c;也没有返回值。当调用该方法时&#xff0c;如果对应 XMLHttpRequest 对象的请求已经被发送并且正在处理中&#xff0c;则会中止该…