C语言(ANSI C类型限定符)

news2024/11/28 22:54:42

目录

1.const(恒常性)

2.volatile

3.restrict

1.const(恒常性)

如果我们想处理一个基本类型时,我们可以选择传递类型变量值或类型变量的地址。但有的时候我们传入地址但不想让其修改地址上面存储的值,那么就可以用到const。

这个时候const的作用就到了。这里const位置不同,所造成的效果也不同

1: 开头

Const int * ar

ar指针所指向内容的值无法修改,但可以修改ar指向的地址

2:后面

Int * const ar

ar指针指向的地址无法修改,但地址的值可以修改

3:前面后面都有

Const int * const ar

ar指针指向的地址无法修改,且地址的值也无法修改

这里要记住

1.可以把const数据或非const数据的地址初始化为指向const的指针或为其赋值是合法的(保证赋值过来地址上面的值都不会被修改)

2.非const数据只能赋给普通指针(如果把cosnt数据给到一个普通指针,那么指针就可以对该地址上面的值进行修改)

可以发现系统不会让你修改x,z存储地址上的值

这里可以看到系统不允许你修改指向x存储的值

2.volatile

volatile限定符告知计算机,代理(而不是变量所在的程序)可以改变变量的值。通常,它被用于硬件地址以及在其他程序或同时运行的线程中共享数据

这个概率你可能不太理解,我们先来看个举例

Val1 = x;

Val2 = x;

以上代码使用两次x,但并未改变它的值。于是编译器把x的值临时存储在寄存器中。然后在val2需要使用x时,才从寄存器中(而不是原始内存位置上)读取x的值。以节约时间,这个过程被称为高速缓存。通常,告诉缓存是个不错的优化方案,但是如果一些其他代理在以上两条语句之间改变了x的值,就不能这样优化了。如果此时没有volatile关键字,编译器就不会知道这种事情发生。因此如果声明没有volatile关键字,编译器会假定变量的值在使用过程中不变,然后在尝试优化代码

可以同时使用const和volatile关键字

Volatile const int loc;

3.restrict

restrict关键字允许编译器优化某部分代码以更好地支持计算。它只能用于指针,表示该指针是访问数据对象的唯一且初始的方式。

Int ar[10];

Int * restrict restar = (int *) malloc(10 * sizeof(int));

Int * par = ar;

指针restar是访问由malloc()所分配内存的唯一且初始的方式

而指针par既不是访问ar数组中的数据的初始方式,也不是唯一的方式,所以不用把它设置为restrict


好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,如果有啥不会的朋友记得论坛里面提问哈~

如果朋友你感觉文章的内容对你有帮助,可以点赞关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈

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

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

相关文章

Ansys Speos | 基于 Workbench 和 Speos 的准直全反射透镜优化设计案例

概述 基于Ansys Speos软件,可以准确建立光学系统模型并进行成像效果仿真。在使用Speos进行光学系统设计过程中,当完成初始光学系统建模后,还需要进一步结合仿真结果,调整出满足设计要求的系统参数,如果采用手动调整参…

香农 | 流行潮(bandwagon)

【编者按:面对当前的Chatgpt热潮,该如何看待呢?英语当中有种说法叫 jump on the bandwagon,意为跟风随大流。60多年前,当信息论的发展进入越来越多的领域,一向低调的香农在《流行潮》(The Bandw…

Linux 游戏性能谁的 更优秀X.Org还是Wayland!

导读X.Org 和 Wayland 是目前 Linux 平台上的两大主流显示服务器,那么两者在 Linux 游戏性能上谁更优秀呢?国外科技媒体 Phoronix 在 Ubuntu 22.10 上对其进行了多款游戏的实测。评测在运行 GNOME 43.1 的 Ubuntu 22.10 上进行测试,在安装英伟…

基于QT5.14.2的MQTT通信

一、概述 默认的Qt环境是不能使用MQTT的,但Qt官方提供了基于MQTT的封装,需要通过源码进行编译。 可以在下面的链接中获取到: https://github.com/qt/qtmqtt 在dev分支中可以选择MQTT版本,选择最新的下载到本地。注意一定要选择对…

Video Speed Controller谷歌视频加速插件——16倍速

文章目录前言最简单的版本一、如果是简单的话 可以Microsoft Edge使用二、简单的版本 火狐的话使用Global Speed插件三、由于视频受限以上的方法行不通 还是谷歌好用前言 主要是网课刷的时候 太慢所以找到了刷视频的方法 由于前几个的权限受限制 所以还是选用了谷歌浏览器的 V…

Ambire Wallet 2023 年路线图

在一个充满活力的建设者空间,但在一个努力的熊市中,作为加密技术创新者,我们必须保持适应,同时继续通过做好工作来领导:建立愿景。 已经建设了很多,也还有很多要做的:Ambire 发布了今年的雷达图…

炎症回路和肠道微生物

✦ ✦ ✦ 炎症:就是平时人们所说的“发炎”,是机体对于刺激的一种防御反应。炎症,可以是感染引起的感染性炎症,也可以不是由于感染引起的非感染性炎症。 炎症在在各种症状中起重要作用,如脑雾、焦虑和抑郁、腹胀、各种…

数据工程师需要具备哪些技能?

成为数据工程师需要具备哪些技能?数据工程工作存在于各个行业,在银行业、医疗保健业、大型科技企业、初创企业和其他行业找到工作机会。许多职位描述要求数据工程师、拥有数学或工程学位,但如果有合适的经验学位往往没那么重要。 大数据开发…

linux高级命令之用户组相关操作

用户组相关操作学习目标能够知道创建用户组的命令1. 创建用户组命令说明groupadd创建(添加)用户组创建用户组效果图:2. 创建用户并指定用户组创建用户并指定用户组效果图:3. 修改用户组修改用户组效果图:4. 删除用户组命令说明groupdel删除用户组删除用户组效果图:说明:如果用户…

Git-学习记录

文章目录1. Git-基础1.1 获取 Git 仓库1.2 记录每次更新到仓库1.3 远程仓库的使用2. Git-分支2.1 Git 分支的新建与合并2.2 Git 分支的管理1. Git-基础 1.1 获取 Git 仓库 通常有两种获取 Git 项目仓库的方式: 将尚未进行版本控制的本地目录转换为 Git 仓库&…

一文解决从进程栈内存底层原理到Segmentation fault报错

栈是编程中使用内存最简单的方式。例如&#xff0c;下面的简单代码中的局部变量 n 就是在堆栈中分配内存的。 #include <stdio.h> void main() {int n 0;printf("0x%x\n",&v); } 那么我有几个问题想问问大家&#xff0c;看看大家对于堆栈内存是否真的了…

maven deploy上传本地jar至私服

1.场景 首先目前依赖包的管理大多数是maven&#xff0c;其次当使用到第三方的包的时候&#xff0c;官方的仓库或者aliyun的maven都是没有这个包的。那么&#xff0c;为了方便我们使用 我们需要将本地的这个jar上传到 公司内部的私服去&#xff0c;以便大家使用 2. 上操作 我…

VS Code 用作嵌入式开发编辑器

使用 Keil MDK 进行嵌入式开发时&#xff0c;Keil 的编辑器相对于主流编辑器而言有些不方便&#xff0c;比如缺少暗色主题、缺少智能悬停感知&#xff08;鼠标停在一个宏上&#xff0c;能自动展开最终的宏结果&#xff09;、代码补全不好用等等&#xff0c;所以推荐使用 VS Cod…

【Java技术】基于Http的文件断点续传实现

1.断点续传的介绍 客户端软件断点续传指的是在下载或上传时&#xff0c;将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分&#xff0c;每一个部分采用一个线程进行上传或下载&#xff0c;如果碰到网络故障&#xff0c;可以从已经上传或下载的部分开始继续上传下载…

电子科技大学操作系统期末复习笔记(二):进程与并发控制

目录 前言 进程管理 进程基本知识 程序的顺序执行 前趋图 程序的并发执行 并发程序 进程的定义和特征 进程的特征和状态 操作系统内核 定义 功能 原语 原子操作的实现 操作系统控制结构 进程控制块PCB 进程组织&#xff08;进程树&#xff09; 进程的创建 …

3DMAX高级弯曲插件使用教程

3dMax高级弯曲插件是对3dmax原生“弯曲&#xff08;Bend&#xff09;”修改器的一个增强&#xff0c;给用户更多控制弯曲修改器的参数设置&#xff0c;它让用户输入宽度&#xff0c;插件脚本将移动中心以获得正确的宽度。 主要特性&#xff1a; - 使用智能捕捉捕捉到自定义网格…

静态库和动态库的制作

一、什么叫做库&#xff1a; 库&#xff1a;二进制的程序&#xff0c;能被操作系统载入内存中执行 二、Linux下的库有两种&#xff1a;静态库和共享库(动态库)&#xff0c;二者的不同点在于代码载入的时刻不同。 A、静态库在程序编译的时候并会被连接到目标代码中&#xff0c;程…

SSM项目-商城后台管理系统

SSM项目-商城后台管理系统开发说明开发环境项目界面演示项目功能具体的技术指标开发过程1、搭建SSM框架1.1、建库建表1.2、新建Maven工程1.3、配置pom.xml1.4、目录结构1.5、jdbc.properties1.6、mybatis-config.xml1.7 两个Spring的配置文件applicationContext_dao.xmlapplica…

数据库(三)

第三章 MySQL库表操作 3.1 SQL语句基础 3.1.1 SQL简介 SQL&#xff1a;结构化查询语言(Structured Query Language)&#xff0c;在关系型数据库上执行数据操作、数据检索以及数据维护的标准语言。使用SQL语句&#xff0c;程序员和数据库管理员可以完成如下的任务。 改变数据…

【图解数据结构与算法】数据结构与算法知识点整理 Data Structures and Algorithms

程序数据结构算法 数据结构是可以存储和组织数据的命名位置。 算法是用于解决特定问题的一组步骤。 数据结构是指&#xff1a;一种数据组织、管理和存储的格式&#xff0c;它可以帮助我们实现对数据高效的访问和修改。 数据结构 数据元素 元素之间的结构。 如果说数据结…