Exercises

news/2024/9/24 18:06:36

image


image


image


### Auto自动化变量自动存储类别是默认的存储类别,通常用于在”函数内部定义的局部变量“。这些变量会在程序执行到其定义的代码块时对应的栈空间被创建,函数执行完毕后变量对应栈空间会自动销毁。
示例:
int main() //宿主
{auto int data;//寄生虫 auto int data; 局部变量就是自动化变量 申请出来的栈空间在函数返回结束的时候会被释放掉return 0;
} auto变量的特点:默认存储类:auto是C语言中局部变量的默认存储类。如果你在定义变量时没有显式地指定存储类,那么它将被视为auto类型。自动分配内存:auto变量在进入其作用域时分配内存,并在离开作用域时释放内存。这意味着它们的生命周期与其所在的函数或代码块的执行时间相对应。未初始化的值不确定:auto变量如果没有显式初始化,其初始值将是不确定的。它们的值取决于它们在内存中的位置和之前在该内存位置上存储的数据。块级作用域:auto变量的作用域限制在定义它们的代码块内。它们不能被其他代码块或函数直接访问。隐藏性:可以在不同的代码块中使用同名的auto变量,这样它们将具有不同的作用域,并且互不影响。这种名称隐藏可以帮助实现信息的封装和模块化设计。PS:(所有局部变量默认是自动化变量)一般局部变量的空间存放在栈空间里面,函数退出,他的空间也会跟着被释放,那你如果还去获取它的数据,那就是非法内存地址访问。很有可能导致程序崩溃段错误。

### register寄存器变量
寄存器变量,不是存储在内存条里面的,所有这种变量没有内存地址,所以不能&寄存器变量名。示例:
int main() //宿主
{register int data;//寄生虫 auto int data; 局部变量就是自动化变量 申请出来的栈空间在函数返回结束的时候会被释放掉
} 
register特点:快速访问:寄存器变量理论上可以比存储在内存中的变量更快地进行访问,因为寄存器是CPU内部的一部分,访问速度极快。局部变量:register存储类只能用于局部变量和函数参数,不能用于全局变量或静态变量。限制使用地址运算符(&):由于寄存器变量可能(编译器优化了)不会真正存储在内存中,而是在寄存器中,所以不允许对寄存器变量使用地址运算符&。这意味着你不能获取寄存器变量的地址。编译器优化建议:register只是对编译器的一种建议,而不是强制要求。现代编译器会根据具体情况来决定是否将一个变量放入寄存器,即使没有使用register关键字,编译器也可能会自动优化一些变量到寄存器中。有限的寄存器数量:CPU的寄存器数量有限,因此如果太多变量使用register关键字,编译器可能会忽略一些请求,并且将这些变量存储在内存中。

### 外部变量 - extern
示例1:修饰全局变量extern int a;//注意这里并不是定义a申请空间!而是声明a为外部extern变量,a已经在其他位置定义(申请4个字节的空间)了这里只是声明示例2:修饰函数(默认已经修饰了),在函数声明的时候修饰extern int Fun();//extern可以写,写了提高代码可读性基本作用:① 不能修饰局部变量,只能修饰全局作用域:全局变量和函数② 修饰全局变量:该全局变量能在对应修饰的.c模块中使用③ 修饰函数:该函数能在其他.c模块中被调用(其实不需要修饰,函数声明的时候默认就是外部变量)、extern的特点:① 外部引用:extern关键字声明一个变量或函数是在其他地方定义的,而不是在当前”文件中“定义的。这使得不同的文件可以共享同一个变量或函数。② 避免重复定义:通过使用extern关键字,可以在多个文件中引用同一个全局变量或函数,而不会导致重复定义错误。③ 全局作用域:被extern声明的变量或函数通常具有全局作用域,这意味着它们可以在整个程序中被访问,只要有相应的声明。④ 在头文件中的应用:extern关键字常常在头文件中使用,以便将变量和函数的声明提供给多个源文件.c文件。⑤ 延迟定义:extern关键字只是声明一个变量或函数的存在,而不实际分配存储空间或定义它们的具体内容。实际的定义必须在某个源文件中进行。extern是用来声明修饰变量的,被声明的变量指定的这个变量是 外面模块的变量,但是外面的变量只有一个

### static
示例1:在"定义"局部变量的时候,修饰变量让变量只”初始化一起“,被修饰的变量称为静态变量. 设置变量的存储域。int Fun(){static int a = 2;return 0;    }示例2:在函数“声明”和”定义“的时候修饰,让该函数变成静态函数.   限制变量的作用域。
在C语言中,函数的静态属性必须在定义时明确指出。因此,只在声明时使用static关键字,而在定义时不使用static关键字是不可行的。这会导致编译器认为这是两个不同的函数(二义性),从而产生错误。static int Fun();static int Fun(){printf("I'm Fun\n");return 0;     }static的特点:① 静态变量:在函数内部使用static关键字声明的局部变量称为静态局部变量。与普通局部变量不同的是,静态局部变量的生命周期会持续到程序的结束。它们在第一次执行时被初始化,并在后续调用中保留其值。② 静态函数:使用static关键字声明的函数具有文件范围,即它们只能在定义它们的文件中可见,不能被其他文件所调用。这也意味着静态函数与文件相关联,而不是与程序的整个执行过程相关联。③ 静态全局变量:在全局范围内使用static关键字声明的变量具有文件范围,只能在声明它们的文件中可见,不能被其他文件所访问。这意味着它们对于整个程序来说是私有的,不会与其他文件中相同名称的变量发生冲突。④ 限制外部链接:在C语言中,static关键字还可以限制变量和函数的外部链接性,使得它们只能在当前文件中使用,而不能被其他文件引用。

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

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

相关文章

vxlan基本原理及裸搭过程

https://mp.weixin.qq.com/s/pqVvBd2CbHkWwD79aDb6mg剥离flannel或者其他overlay网络的上层封装,我们可以通过 ip命令纯手工搭建一个vxlan overlay网络, 这其中最关键的部分是:vethpair: 打通容器内外 vxlan.nic: 虚拟网卡,封装/解封数据包除了创建这些硬件,我们还需要设置…

c语言程序实验————实验报告十二

c语言程序实验————实验报告十二实验项目名称: 实验报告十二 用指针处理函数与数组 实验项目类型:验证性 实验日期:2024 年 5 月 30 日一、实验目的 1.掌握指针变量的定义格式,会定义和使用指针变量 2.能正确建立指针变量与数组(包括一维、两维和字符串数组)的联系,并…

6.21-二叉搜索树的最近公共祖先

235. 二叉搜索树的最近公共祖先 题意描述:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己…

Python标注工具labelImg使用Pyinstaller打包成EXE的过程及问题处理

直接上过程 1.在python项目中使用pip命令安装pyinstaller。 2.在python编辑器(如Pycharm)终端切换到要打包的.py文件所在目录。 3.使用pyinstaller工具命令打包.py文件,如: pyinstaller labelImg.py --noconsole --workpath .\Pyinstaller\temp --distpath .\Pyinstaller\…

网易云音乐榜单爬取

打开网易云音乐,进入飙升榜进入到开发者工具页面,搜索列表页歌曲名称,查看请求地址模拟浏览器发出请求,查看响应内容import requestsurl = https://music.163.com/discover/toplist?id=19723756headers = {User-Agent:ozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebK…

AWX部署

目录awx1. 部署awx1.1 克隆仓库1.2 生成yaml1.3 部署operator1.4 查看pod1.5 修改镜像地址2. 登录awx2.1 查看端口2.2 查看默认密码 awx awx是红帽Ansible Tower的开源版本,他的功能是可以使用web界面来操作ansible 操作系统使用openEuler 22.03 这里是在k8s上部署的,需要使用…

开源表单设计器好不好用?优点怎么样?

开源表单设计器的优势表现在哪?一起来看看。要想实现提质增效,让数据资源更好地利用起来,助力企业增产创收,那就需要采用更理想的办公利器。低代码技术平台是近些年流行于各职场办公中的重要软件平台,更灵活、性能更高、更靠谱、优势特点也非常多,在推动企业实现数字化转…