【深入理解C语言】-- 关键字1

news2024/12/29 10:02:11

在这里插入图片描述

🐇

🔥博客主页: 云曦
📋系列专栏:深入理解C语言

💨吾生也有涯,而知也无涯
💛 感谢大家👍点赞 😋关注📝评论

文章目录

  • 前言
  • 一、auto
    • 1.1 auto的介绍
    • 1.2 auto的使用
  • 二、register
    • 2.1 register的介绍
    • 2.2 register的使用

前言

本期为深入理解C语言的第一期,这期我们将会更深入的理解二个关键字

一、auto

1.1 auto的介绍

一般在代码块 { } 内定义的变量,即是局部变量,默认都是auto修饰的,不过我们一般都是把auto省略掉的。
注意:auto只能用来修饰局部变量。且局部变量、自动变量、临时变量都是一回事,一般统称为“局部变量”。

1.2 auto的使用

#include<stdio.h>

int main()
{
	auto int a = 10;
	int b = 20;

	printf("%d\n", a);
	printf("%d\n", b);

	return 0;
}
  1. 局部变量默认都是auto修饰的
  2. 不过局部变量一般省略不写
  3. auto只能修饰局部变量,不能修饰全局变量
    在这里插入图片描述

auto修饰了全局变量会如何呢?

#include<stdio.h>

auto int g_val = 100;

int main()
{
	auto int a = 10;
	int b = 20;

	printf("%d\n", a);
	printf("%d\n", b);
	printf("%d\n", g_val);

	return 0;
}

可以看到用auto修饰的全局变量是会报错的。
在这里插入图片描述
在这里插入图片描述

单从作用上可以看出auto的作用并不大,虽然作用不大,但还是有要了解一下的。

二、register

2.1 register的介绍

我们先来看一下存储金字塔
存储金字塔

看完上图可以得出结论:

  • 离CPU越近的存储单元,效率越高,单价成本越贵。
  • 离CPU越远的存储单元,效率越低,单价成本越便宜。
  • register的用途就是尽量将所修饰的变量(注意:这里说的是尽量),放入CPU寄存区(寄存区)中,从而达到提高效率的目的。
  • register修饰的使用事项:
  1. 修饰在局部变量上(修饰在全局变量上会导致CPU寄存器被长时间占用)。
  2. 修饰在不会写入的(写入就需要写回内存,后续还要读取检测的话,register修饰的意义就没有了)。
  3. 高频被读取的(提高效率所在)。
  4. 如果使用,请不要大量使用,因为寄存器数量有限。

2.2 register的使用

#include<stdio.h>

int main()
{
	//register只是尽量将所修饰的变量,
	//放入CPU寄存区(寄存器)中
	//并不一定会放入
	register int a = 100;
	printf("%d\n", a);
	register int b = 200;
	printf("%d\n", b);
	register int c = 300;
	printf("%d\n", c);
	register int d = 500;
	printf("%d\n", d);

	return 0;
}

在这里插入图片描述

这里需要注意一个点:寄存器内的内容是没有地址的,而register是尽量放入寄存器内,但放没放进去我们无从知晓,那么C语言直接将register修饰的变量设置成了不能被取地址的变量。

#include<stdio.h>

int main()
{
	register int a = 100;
	printf("%p\n", &a);

	return 0;
}

很直接,编译都编不过去
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

【MySQL】表的内连和外连

本期我们来谈谈表的连接 目录 一、内连接 二、外连接 2.1 左外连接 2.2 右外连接 一、内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选&#xff0c;我们上期学习的复合查询都是内连接&#xff0c;也是在开发过程中使用的最多的连接查询 使用内连接时…

proteus结合keil-arm编译器构建STM32单片机项目进行仿真

proteus是可以直接创建设计图和源码的&#xff0c;但是源码编译它需要借助keil-arm编译器&#xff0c;也就是我们安装keil-mdk之后自带的编译器。 下面给出一个完整的示例&#xff0c;主要是做一个LED灯闪烁的效果。 新建工程指定路径&#xff0c;Schematic,PCB layout都选择默…

记一次mybatis-plus关于Long和long自动添加过滤条件的bug记录

文章目录 1.前提条件2.相关知识3.原理解释&#xff1a;4.情景复现&#xff1a; 1.前提条件 接口代码是由mybatis-plus封装的page分页 有一个实体类属性类型是long和Long的区别&#xff1a;long会添加一个过滤条件未异常情况&#xff0c;改成Long则不会添加是正常情况,详细情况参…

leetcode358周赛

2815. 数组中的最大数对和 核心思想&#xff1a;维护每一个最大的数字的最大值&#xff0c;然后一边更新最大值&#xff0c;一边统计结果。其中求nums中的每一个数的数位最大值可以用map的方法&#xff0c;我自己做的时候是用的%10&#xff0c;感觉map这种方法很巧妙。 2816. …

如何在iPhone手机上修改手机定位和模拟导航?

如何在iPhone手机上修改手机定位和模拟导航&#xff1f; English 首先&#xff0c;你需要在Mac电脑上下载安装 Location Simulator/定位模拟工具 和 Runner 这两款应用程序。 完成安装后&#xff0c;打开软件&#xff0c;并用USB连接手机设备 修改iPhone手机定位和模拟导航 …

锐捷无线产品运维

目录 登录AP产品 Console登录&#xff08;只可以现场登录&#xff09; Web/Telnet/SSH登录&#xff08;可以现场、远程登录&#xff09; 配置AP的管理地址 通过Web界面远程登录 通过Telnet、SSH等命令行的方式登录 登录AC产品 Console登录&#xff08;只可以现场登录&a…

CSS中的position属性有哪些值,并分别描述它们的作用。

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ static⭐ relative⭐ absolute⭐ fixed⭐ sticky⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那…

梯度下降介绍

什么是梯度 梯度是微积分中一个很重要的概念&#xff0c;在单变量的函数中&#xff0c;梯度其实就是函数的微分&#xff0c;代表着函数在某个给定点的切线的斜率&#xff1b;在多变量函数中&#xff0c;梯度是一个向量&#xff0c;向量有方向&#xff0c;梯度的方向就指出了函…

【2023年11月第四版教材】《第4章-信息系统管理(合集篇)》

第4章-信息系统管理之管理方法&#xff08;第四版新增章节&#xff09;&#xff08;第一部分&#xff09; 章节说明1 管理方法1.1 信息系统四个要素1.2 信息系统四大领域1.3 信息系统战略三角1.4 信息系统架构转换1.5 信息系统体系架构1.6 信息系统运行1.7 运行和监控1.8 管理和…

day42时间格式转化

题目描述&#xff1a; 解题思路 1.将字符串给以" "为间隔进行切割然后各个部分进行不同的处理。 字符串切割使用 strtok(char* a, char* b) 函数&#xff0c;该函数返回切割完成后第一个子串的指针。 //切割&#xff0c;返回第一个字串的指针。这里注意&#xff0c;…

Kafka3.0.0版本——Broker( 退役旧节点)示例

目录 一、服务器信息二、先启动4台zookeeper&#xff0c;再启动4台kafka三、通过PrettyZoo工具验证启动的kafka是否ok四、查看4台kafka集群节点上是否存在创建的名称为news的主题五、退役旧节点5.1、执行负载均衡操作5.2、 执行停止命令5.3、再次查看kafka中的创建过的名称为ne…

单片机通讯技术应用解析:传感器数据交互、外设控制与配置等案例分析

随着科技的不断发展&#xff0c;单片机通讯技术在各个领域的应用越来越广泛。本文将从单片机通讯技术的基本原理、常见通讯方式以及应用案例等方面进行详细介绍和分析。 首先&#xff0c;我们将深入探讨单片机通讯技术的基本原理和通讯方式。单片机通讯的基本原理是通过特定的…

Element Plus报错:ResizeObserver loop completed with undelivered notifications.

el-selected踩坑&#xff1a;el-selected 显示下拉框 mouseover 时报错&#xff01;&#xff01;&#xff01; 原来是属性 popper-append-to-body 被废除&#xff0c;改为 teleported。 element ui <el-select:popper-append-to-body"false"value-key"id&q…

【无监督】2、MAE | 自监督模型提取的图像特征也很能打!(CVPR2022 Oral)

文章目录 一、背景二、方法三、效果 论文&#xff1a;Masked Autoencoders Are Scalable Vision Learners 代码&#xff1a;https://github.com/facebookresearch/mae 出处&#xff1a;CVPR2022 Oral | 何凯明 | FAIR 一、背景 本文的标题突出了两个词&#xff1a; masked…

基于 ObjectOutputStream 实现 对象与二进制数据 的序列化和反序列化

目录 为什么要进行序列化呢&#xff1f; 如何实现 对象与二进制数据 的序列化和反序列化&#xff1f; 为什么要进行序列化呢&#xff1f; 主要是为了把一个对象&#xff08;结构化的数据&#xff09;转化成一个 字符串 / 字节数组&#xff0c;方便我们存储&#xff08;有时候需…

Web安全:中间件漏洞

中间件一般指的是IIS、Apache、Nginx、Tomcat及Weblogic等一系列Web服务器中间件。中间件存在漏洞会直接威胁Web服务器代码及后台数据库的安全。 以前出现过的中间件漏洞一般是文件解析漏洞&#xff0c;例如IIS文件解析漏洞、Apache文件解析漏洞及Nginx文件解析漏洞等。如今我…

大模型时代和传统机器学习时代工具栈侧重点有所不同

大模型时代和传统机器学习时代工具栈侧重点有所不同 本章从企业训练模型、构建AI赋能应用的工作流视角出发,详解涉及的主要环节,并关注LLMOps和MLOps在流程上的侧重点差异。我们认为AI = Data + Code,历经数据准备、模型训练、模型部署、产品整合,分环节看: ► 数据准…

服务器安全防御要注意哪些方面?

服务器安全是我们每个互联网公司都应该做好的一个环节&#xff0c;每个互联网公司都会涉及到信息数据安全&#xff0c;而这些数据信息一般存放的地方都是在服务器&#xff0c;如果服务器受到破坏&#xff0c;我们的数据信息将会受到侵犯届时将会造成不可挽回的损失&#xff0c;…

三维模型OSGB格式轻量化在网络传输中的重要性探讨

三维模型OSGB格式轻量化在网络传输中的重要性探讨 随着三维模型应用的不断增加&#xff0c;网络传输成为了将三维模型从一个地方传输到另一个地方的主要方式。在网络传输中&#xff0c;数据量越大&#xff0c;传输速度就越慢&#xff0c;因此轻量化OSGB格式的三维模型数据在网络…

C#_详解浮点数类型特征

浮点数 浮点数基础 float double decimal 浮点数示例 float f; double d; decimal m;//①超过精度位数&#xff0c;数字无效 f 1234567890f; Console.WriteLine("f {0}",f);//f 1.234568E09//②再赋给更大精度度量&#xff0c;不能恢复数字 d f; Console.Write…