Day17、18、19学习记录

#c语言知识

内存管理

1.作用域

(1)代码块作用域(代码块是{}之间的一段代码)

(2)函数作用域

(3)文件作用域

2.局部变量(自动变量auto):

在函数(代码块{})内部定义的变量

(1)作用域:在函数内部

(2)生命周期:从变量定义到函数结束

*局部变量在栈区

*未赋初值,内容随机

*形参是局部变量的一种

3.全局变量

在函数外部定义的变量

(1)作用域:整个项目中所有文件

(如果在其他文件中使用 需要声明)

 (2)生命周期:从程序创建到程序销毁(和程序同生共死)

*全局变量存在数据区

*全局变量可以和局部变量重名 不同文件的全局变量不可重名

*数据在操作时会采用就近原则

重新开辟一片内存空间 地址不同       /      123和456地址相同

4. 静态(static)局部变量

(1)作用域:在定义的函数内部

(2)生命周期:从程序创建到程序销毁(和程序同生共死)

*在数据区进行存储,不会因为栈区的变化而发生改变。

*static局部变量的值只初始化一次,可赋值多次。

*若未赋初值,则由系统自动赋值:数值型变量自动赋初值0,字符型变量赋空字符。

 

 (局部变量未初始化 值为乱码)

 

 

 

5.extern全局变量声明:extern int a;声明一个变量,这个全局变量在别的文件中已经定义了,这里只是声明,而不是定义。

6.全局函数和静态函数

在c语言中函数默认都是全局的,使用关键字static可以将函数声明为静态,函数定义为static就意味着这个函数只能在定义这个函数的文件中使用,在其他文件中不能被调用,即使在其他文件中声明这个函数都没用。

对于不同文件中的static函数名字可以相同。

(声明了之后才能转过去)

7.全局函数

(1)作用域:在整个项目中所有文件中使用

(2)全局函数的名称在作用域中是唯一的。

*在c语言中,不支持函数重载(同一个函数名对应不同参数名)。

*一个函数可以调用自己(递归函数,一定要有出口)

8.静态函数 (可以和全局函数重名)

作用域:当前文件中

生命周期:从程序创建到程序销毁(和程序同生共死)

注意:

*允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰。

*同一源文件中,允许全局变量和局部变量同名,在局部变量的作用域内,全局变量不起作用。

*所有的函数默认都是全局的,意味着所有的函数都不能重名,但如果是static函数,那么作用域是文件级的,所以不同的文件static函数名是可以相同的。

const int abc=123;安全的常量 存储区为数据区常量区 

内存四区:

全局初始化数据区/静态数据区(data段)

该区包含了在程序中明确被初始化的全局变量、已经初始化的静态变量(包括全局静态变量和局部静态变量)和常量数据(如字符串常量)。

未初始化数据区(bss区)

存入的是全局未初始化变量和未初始化静态变量。未初始化数据区的数据在程序开始执行之前被内核初始化为0或者空(NULL)。

程序在加载到内存前,代码区和全局区(data和bss)的大小就是固定的,程序运行期间不能改变。然后,运行可执行程序,系统把程序加载到内存,除了根据可执行程序的信息分出代码区(text)、数据区(data)和未初始化数据区(bss)之外,还额外增加了栈区、堆区。

 

 1.代码区

*代码区存放CPU执行的机器指令既程序汇编而成的二进制代码。
*代码区是共享的,对于频繁执行的程序,内存中只需要保存一份。
*代码区是只读的,只读的原因是防止程序意外修改了指令。

*代码区还规划了局部变量的相关信息。

2.数据区

(1)bss段:

*未初始化的静态变量(全局、局部)

*初始化为0的静态变量(全局、局部)

*未初始化的全局变量和初始化为0 的全局变量

*未初始化的全局常量

data段:

*初始化非0的静态变量(全局、局部)

 *初始化非0的全局变量

 rodata段:

*初始化为0 的全局常量

*初始化非0的全局常量

3.栈区(stack)

栈是一种先进后出的内存结构,由编译器自动分配释放,存放函数的参数值、返回值、局部变量等。在程序运行过程中实时加载和释放,因此,局部变量的生存周期为申请到释放该段栈空间。

4.堆区(heap)

堆是一个大容器,它的容量要远远大于栈,但没有栈那样先进后出的顺序。用于动态内存分配。堆在内存中位于bss区和栈区之间。一般由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。

 

(a、b间有间隔 防止被其他程序篡改数据 由高到低)

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

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

相关文章

jmeter-03界面介绍

文章目录 主界面介绍测试计划介绍线程组介绍线程组——选择测试计划,右键-->添加-->线程-->线程组 主界面介绍 测试计划介绍 测试计划:本次测试所需要的所有内容,即父线程 线程组介绍 jmeter讲究一个概念:一个线程一…

Linux内存管理:(十一)页面分配之慢速路径

文章说明: Linux内核版本:5.0 架构:ARM64 参考资料及图片来源:《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址: zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 水位管理和分配优先级 页面分配…

小白水平理解面试经典题目_二维数组类LeetCode 2966 Divide Array【排序算法实现】

2966 将数组划分为具有最大差值的数组 小白渣翻译: 给定一个大小为 n 的整数数组 nums 和一个正整数 k 。 将数组分成一个或多个大小为 3 的数组,满足以下条件: nums 的每个元素都应该位于一个数组中。一个数组中任意两个元素之间的差异小…

力扣每日一题 ---- 1906. 查询差绝对值的最小值

本题中,我们的题目求的是差值的最小值,我们考虑一个因素,当前题目中给出的数组是没有排序过的,那么想要求的差值,是不是要两两配对进行判断差值最小值。这里我们就很费时间了, O(N^2)的时间复杂度&#xf…

【LeetCode】27.移除元素 (快慢指针法)

题目 图解 思路 运行代码 代码 采用 LeetCode 的格式模板 int removeElement(int* nums, int numsSize, int val) {int Left 0;int Right 0;while(Right < numsSize){if(nums[Right] ! val) {nums[Left] nums[Right];Left;}Right;}return Left;// 此时 Left 刚好是数组的…

FANUC机器人开机时无法进入系统,示教器黑屏故障处理总结

FANUC机器人开机时无法进入系统&#xff0c;示教器黑屏故障处理总结 故障描述&#xff1a; FANUC机器人开机时&#xff0c;示教器在初始化时显示&#xff1a;EMAC initial call failed&#xff08;示教器上电时会进入boot画面&#xff0c;左上角会出现一些白色的英文提示&#…

Linux系统漏洞一键检测与修复工具

支持检测及修复漏洞的列表 OpenSSL CVE-2021-3712 OpenSSH CVE-2021-41617 sudo CVE-2021-3156 glibc CVE-2018-11236 polkit CVE-2021-4034 wget CVE-2017-13090 kernel CVE-2016-5195 bash CVE-2016-7543 samba CVE-2021-…

算法基础,一维,二维前缀和差分详解

目录 1.前缀和 1.一维前缀和 例题&#xff1a;【模板】前缀和 2.二维前缀和 例题&#xff1a;【模板】二维前缀和 2.差分 1.一维差分 1.性质&#xff1a;d[i]的前缀和等于a[i] 2.性质&#xff1a;后缀区间修改 例题&#xff1a;【模板】差分 2.二维差分 例题&#x…

.net core 6 集成 elasticsearch 并 使用分词器

1、nuget包安装NEST、安装elasticsearch、kibana、ik分词器、拼音分词器 2、创建操作对象 //索引库 static string indexName "testparticper"; //es 操作对象 ElasticClient elasticClient new ElasticClient(new ConnectionSettings(new Uri("http://192.…

YOLO-World: Real-Time Open-Vocabulary Object Detection

文章目录 1. Introduction2. Experiments2.1 Implementation Details2.2 Pre-training2.3 Ablation Experiments2.3.1 预训练数据2.3.2 对RepVL-PAN的消融研究2.3.3 文本编码器 2.4 Fine-tuning YOLO-World2.5 Open-Vocabulary Instance Segmentation2.6 Visualizations Refere…

Linux系统安全:安全技术 和 防火墙

一、安全技术 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全决策依据,类 似于监控…

ABAP Range Table:RANGES的使用

目录 Range TableRANGERANGES RANGE的四个参数SIGNOPTIONLOWHIGH示例程序 Range Table 1、Range Table 概述 RANGE TABLE为 SAP R/3系统标准内表的一种&#xff0c;结构与 Selection Table 一致&#xff0c; 由 SIGN, OPTION, LOW 和 HIGH字段组成&#xff1b; 可以通过 TYPE…

10. BI - 决策树的使用及可视化

本文为 「茶桁的 AI 秘籍 - BI 篇 第 10 篇」 文章目录 可视化探索决策树原理决策树算法决策树可视化泰坦尼克海难数据 Hi&#xff0c;你好。我是茶桁。 上一节课&#xff0c;咱们了解了图形的具体绘制方法&#xff0c;接下来咱们还要看看除了图形绘制之外&#xff0c;还有哪些…

机器学习入门-----sklearn

机器学习基础了解 概念 机器学习是人工智能的一个实现途径 深度学习是机器学习的一个方法发展而来 定义:从数据中自动分析获得模型,并利用模型对特征数据【数据集:特征值+目标值构成】进行预测 算法 数据集的目标值是类别的话叫做分类问题;目标值是连续的数值的话叫做回…

yum命令下载出现Failed to synchronize cache for repo ‘AppStream‘, ignoring this repo.

修改下面的配置文件 问题&#xff1a; cd /etc/yum.repos.d 修改下面四个文件 vim CentOS-Base.repo vim CentOS-AppStream.repo vim CentOS-Extras.repo vim CentOS-PowerTools.repo测试yum是否正常 yum -y install wget

MATLAB知识点:矩阵的拼接和重复

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章 3.3.4 矩阵的拼接和重复 有时候我们需要对多个矩…

word调整论文格式的记录

页眉的分章显示内容 效果&#xff1a; 步骤&#xff1a; 确保“显示/隐藏的标记”符号打开点亮 前提是章节前面有“分节符&#xff08;下一页&#xff09;”&#xff0c;没有则添加&#xff0c;在菜单栏“布局”——》“下一页” 添加页眉&#xff0c;双击页眉&#xff0c;选…

Cocos XR的WebBox实现流程

1. 正常3D场景下的webview 1.1 组件角色 Cocos Creator正常3D场景下只有在UI组件才支持webview&#xff0c;即作为下图中的UI Nodes(Canvas Node)的子节点&#xff0c;和3D组件是隔离开的&#xff0c;不能显示在3D空间中&#xff0c;UI Nodes(Canvas Node)是一个平面内的矩形…

jsp 样衣申请与归还管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 样衣申请与归还管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境 为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为My…

链表——C语言——day17

链表 链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。在用数组存放数据时&#xff0c;必须事先定义固定的长度&#xff08;即元素个数&#xff09;。链表则没有这种缺点&#xff0c;它根据需要开辟内存单元。 链表有一个“头指针“变量&#xff0c;图中…