免费的外贸网站/sem竞价托管

免费的外贸网站,sem竞价托管,外贸公司网站有哪些,外贸网站建设十大标准外贸网站建站在C语言程序中,const关键字也是经常会用到的一个关键字,那么使用const关键字的目的是什么呢?事实上,在程序中使用const关键字的主要目的就是为了向使用者传递设计者的一些意图。 事实上,无论我们是使用const关键字声明…

在C语言程序中,const关键字也是经常会用到的一个关键字,那么使用const关键字的目的是什么呢?事实上,在程序中使用const关键字的主要目的就是为了向使用者传递设计者的一些意图。

事实上,无论我们是使用const关键字声明变量还是声明参数,其目的都是为了告诉使用者这个变量或者参数的应用目的。合理地使用关键字const 可以使编译器有效地保护那些不希望被改变的变量或参数,防止其无意中被代码修改。所以使用const关键字可以避免一些不必要的错误。

我们已经说明了const关键字的作用,接下来我们将更进一步讨论const关键字使用:

1、const关键字修饰的变量

 const关键字最常见的用法就是修饰变量,使用const关键字修饰的变量可以认为有只读属性。如:

const int a=10;

int b=0;

b=a;  (I)这条语句是正确的

a=b;  (II)这条语句是错误的,编译错误,因为a具有只读属性

虽然const关键字修饰的变量具有只读属性,但绝不能将它简单的等价于常量。事实上C语言的const关键字修饰的变量仅是语法上的常量。

此外,使用const关键字修饰的变量,在声明时必须进行初始化。这是显而易见的,既然是只读的,当然就得有一可供兑取的明确的值,而不是不确定的。例如:

const int a=10;    //合法用法

const int a;      //非法,导致编译错误

另外需要注意的是,使用const关键字定义的变量是全局性的。所以在使用的时候需要注意。

通常使用define定义一个宏,如:#define PI 3.1415976,以后无论在哪里需要使用圆周率时,我们直接使用PI即可,而在编译时预处理器会将所有的PI替换为3.1415976。这很方便,但是由于编译器不会对其进行检查,如果使用不慎就会引入错误,而且此种错误很难发现。而且,我们也无法得到PI的地址,不能向PI传递指针或引用。

为此,我们常使用const关键字修饰的变量来代替宏。使用const声明的变量虽然增加了分配空间,但是可以保证类型安全,并且可以得到其指针。const消除了预处理器的值替代的不良影响,并且提供了良好的类型检查形式和安全性,所以理解了const关键字,对我们的编程是有很大的帮助的。

2、const关键字修饰的指针变量

const关键字除了用来修饰普通变量外,还经常用来修饰指针变量。当然,在讨论之前,我们需要搞清楚两个概念:常量指针和指向常量的指针。所谓常量指针就是指针变量的值一旦初始化就不能改变,所以必须初始化。而所谓指向常量的指针就是其指向的值是一个常量的指针。

在声明指针变量时,const关键字所处的位置,决定了其定义的指针变量的含义,例如我们定义:

aint * const p; 该语句表示指向整形的常量指针 ,它不能在指向别的变量,但指向(变量)的值可以修改。

bconst int * p; 该语句表示指向整形常量 的指针,它指向的值不能修改。

cint const * p; 该语句与b的含义相同,表示指向整形常量 的指针,它指向的值不能修改。

dconst int *const p; 该语句表示指向整形常量 的常量指针 。它既不能再指向别的常量,指向的值也不能修改。

eint const *const p; 该语句与d的含义相同,表示指向整形常量 的常量指针 。它既不能再指向别的常量,指向的值也不能修改。

这写定义容易让人糊涂,但有一点技巧可以帮助我们理解。就是看const关键字的右边跟着的是什么?当const关键字的右边是类型时,则表示值是常量;当const关键字的右边是指针变量,则表示指针本身是常量。

3、const关键字修饰的函数形参

const关键字也经常用来修饰函数的形参。关键字const修饰函数形参时,通常用于参数为指针或引用的情况,且只能修饰输入参数。若输入参数采用“值传递”方式,由于函数将自动产生临时变量用于复制该参数,该参数本就不需要保护,所以不用const修饰。

const关键字修饰函数输入参数的形式如:void function(const  int * a ); 或者void function(const  int & a);都是可以的。在C标准库中就很多这样的应用,例如字符串处理函数:

字符串拷贝函数:char *strcpychar *strDestconst char *strSrc);

返回字符串长度函数:int strlenconst char *str);

以上两个函数就是将源字符串使用const关键字保护起来,防止不注意的修改改变了源字符串的值。

佷显然,采用const关键字修饰函数形参,就是为了保护输入参数。在调用函数的时候,用相应的变量初始化const常量,则在函数体中,按照const所修饰的部分进行常量化,如形参为const int * a,则不能对传递进来的指针所指向的内容进行改变,保护了原指针所指向的内容;如形参为const int & a,则不能对传递进来的引用对象进行改变,保护了原对象的属性。

4、const关键字修饰的函数返回值

const关键字有时候也会用来修饰函数的返回值,这种情况一般是用来修饰返回的指针或引用,保护指针指向的内容或引用的内容不被修改。例如:

const char * function(void);

这种用法比较少见,在此仅提及一下。

综上所述,const关键字不但强大,而且对我们的编程确实有很大的帮助,前提是我们真正的理解了它的用法。

欢迎关注:

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

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

相关文章

nlp cs224n 学习笔记1 Introduction and Word Vectors

注:个人笔记,价值有限,不建议逗留。 word embedding 的意义和目的? 通过一种映射,将自然语言中的单词,嵌入到n维欧式空间中,得到可以用数学语言表达并用计算机计算的“词向量”。 同时我们希望…

Modbus协议栈开发笔记之一:实现功能的基本设计

Modbus作为开放式的工业通讯协议,在各种工业设备中应用极其广泛。本人也使用Modbus通讯很多年了,或者用现成的,或者针对具体应用开发,一直以来都想要开发一个比较通用的协议栈能在后续的项目中复用,而不必每次都写一遍…

天池CV学习赛:街景字符识别-思路与上分技巧汇总

Datawhale 和 天池 合作的零基础入门CV - 街景字符编码识别比赛的正式赛已经结束。本文对一些比赛思路和上分技巧进行了汇总和整理,希望对大家深入学习CV能够有帮助。 本文分为以下几部分: 如何优化官方baseline的效果? 其它解题思路的整理…

Modbus协议栈开发笔记之二:Modbus消息帧的生成

前面我们已经对Modbus的基本事务作了说明,也据此设计了我们将要实现的主从站的操作流程。这其中与Modbus直接相关的就是Modbus消息帧的生成。Modbus消息帧也是实现Modbus通讯协议的根本。 1、Modbus消息帧分析 MODBUS协议在不同的物理链路上的消息帧有一些差异&am…

动手学CV-目标检测入门教程:基本概念

3.1 目标检测基本概念 本文来自开源组织 DataWhale 🐳 CV小组创作的目标检测入门教程。 对应开源项目 《动手学CV-Pytorch》 的第3章的内容,教程中涉及的代码也可以在项目中找到,后续会持续更新更多的优质内容,欢迎⭐️。 如果使…

动手学CV-目标检测入门教程2:VOC数据集

3.2 目标检测数据集VOC 本文来自开源组织 DataWhale 🐳 CV小组创作的目标检测入门教程。 对应开源项目 《动手学CV-Pytorch》 的第3章的内容,教程中涉及的代码也可以在项目中找到,后续会持续更新更多的优质内容,欢迎⭐️。 如果…

C语言学习及应用笔记之四:C语言volatile关键字及其使用

在C语言中,还有一个并不经常使用但却非常有用的关键字volatile。那么使用volatile关键字究竟能干什么呢?接下来我将就此问题进行讨论。 一个使用volatile关键字定义变量,其实就是告诉编译系统这变量可能会被意想不到地改变。那么编译时&…

Modbus协议栈开发笔记之三:Modbus TCP Server开发

在完成了前面的工作后,我们就可以实现有针对性的应用了,首先我们来实现Modbus TCP的服务器端应用。当然我们不是做具体的应用,而是对Modbus TCP的服务器端应用进行封装以供有需要时调用。 这里我们不涉及TCP的协议,这部分与Modbu…

动手学CV-目标检测入门教程3:锚框(anchor)

3.3 锚框 or 先验框 本文来自开源组织 DataWhale 🐳 CV小组创作的目标检测入门教程。 对应开源项目 《动手学CV-Pytorch》 的第3章的内容,教程中涉及的代码也可以在项目中找到,后续会持续更新更多的优质内容,欢迎⭐️。 如果使…

动手学CV-目标检测入门教程4:模型结构

3.4 模型结构 本文来自开源组织 DataWhale 🐳 CV小组创作的目标检测入门教程。 对应开源项目 《动手学CV-Pytorch》 的第3章的内容,教程中涉及的代码也可以在项目中找到,后续会持续更新更多的优质内容,欢迎⭐️。 如果使用我们…

PID控制器开发笔记之十二:模糊PID控制器的实现

在现实控制中,被控系统并非是线性时不变的,往往需要动态调整PID的参数,而模糊控制正好能够满足这一需求,所以在接下来的这一节我们将讨论模糊PID控制器的相关问题。模糊PID控制器是将模糊算法与PID控制参数的自整定相结合的一种控…

动手学CV-目标检测入门教程5:损失函数

3.5 损失函数 本文来自开源组织 DataWhale 🐳 CV小组创作的目标检测入门教程。 对应开源项目 《动手学CV-Pytorch》 的第3章的内容,教程中涉及的代码也可以在项目中找到,后续会持续更新更多的优质内容,欢迎⭐️。 如果使用我们…

Modbus协议栈开发笔记之四:Modbus TCP Client开发

这一次我们封装Modbus TCP Client应用。同样的我们也不是做具体的应用,而是实现TCP客户端的基本功能。我们将TCP客户端的功能封装为函数,以便在开发具体应用时调用。 对于TCP客户端我们主要实现的功能有两个:其一是生成访问TCP服务器的命令&…

动手学CV-目标检测入门教程6:训练与测试

3.6、训练与测试 本文来自开源组织 DataWhale 🐳 CV小组创作的目标检测入门教程。 对应开源项目 《动手学CV-Pytorch》 的第3章的内容,教程中涉及的代码也可以在项目中找到,后续会持续更新更多的优质内容,欢迎⭐️。 如果使用我…

PC软件开发技术之一:在WinCC中通过VBS操作SQL Server2005

在项目中需要在一定条件满足时,保存一些数据到数据库中,并可根据条件查询。考虑到WinCC6.2以后采用的就是SQL Server2005数据库,所以直接利用该数据库即可,通过SQL Server Management Studio(SSMS)可以创建…

K 近邻算法(KNN)与KD 树实现

KD树节点 /// <summary>/// &#xff2b;&#xff24;树节点/// /2016/4/1安晟添加/// </summary>[Serializable]public class KDTreeNode{/// <summary>/// 获取或设置节点的空间坐标/// </summary>public double[] Position { get; set; }/// <…

PC软件开发技术之二:用C#开发基于自动化接口的OPC客户端

OPC全称是Object Linking and Embedding&#xff08;OLE&#xff09; for Process Control&#xff0c;它的出现为基于Windows的应用程序和现场过程控制应用建立了桥梁。OPC作为一整套接口、属性和方法的协议标准集&#xff0c;与具体的开发语言没有关系。 1、OPC客户端接口方…

标记符控制的分水岭算法原理及matlab实现

-------------------------------------------------------------------------------------------------------------------- 附录A 教程【3】给出的matlab源码&#xff0c;附详细注释 function [ ] MarkerControlled_Watershed_tutorial( ) %标记符控制的分水岭算法教程 …

PC软件开发技术之三:C#操作SQLite数据库

我们在开发应用是经常会需要用到一些数据的存储&#xff0c;存储的方式有多种&#xff0c;使用数据库是一种比较受大家欢迎的方式。但是对于一些小型的应用&#xff0c;如一些移动APP&#xff0c;通常的数据库过于庞大&#xff0c;而轻便的SQLite则能解决这一问题。不但操作方便…

自动搜索数据增强方法分享——fast-autoaugment

前言 简短的介绍下分享fast-autoaugment的原因 毫无疑问数据增强对于训练CNN非常有效&#xff0c;大家也在不断发明新的数据增强方法 拿到一份数据集&#xff0c;我们凭借之前的经验组合不同的增强方法形成一个数据增强策略&#xff0c;通常可以得到一个还不错的baseline。但…