const修饰指针(C++ const 用法)

2024-04-17 17:15:10 9

const修饰指针(C++ const 用法)

本文目录

C++ const 用法

1. const常量,如const int max = 100; 优点:const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误。2. const 修饰类的数据成员。 const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。所以不能在类声明中初始化const数据成员,因为类的对象未被创建时,编译器不知道const 数据成员的值是什么。 const数据成员的初始化只能在类的构造函数的初始化表中进行。3. const修饰指针的情况,见下式: const int* a = & int const *a = & int* const a = & const int* const a = & 可以参考《Effective c++》Item21上的做法,如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。因此,为指针本身和指向的内容均为常量。 4. const的初始化 先看一下const变量初始化的情况 1) 非指针const常量初始化的情况:A b; const A a = b; 2) 指针const常量初始化的情况: A* d = new A(); const A* c = d; 或者:const A* c = new A(); 3)引用const常量初始化的情况: A f; const A& e = f; // 这样作e只能访问声明为const的函数,而不能访问一般的成员函数; 5. const在函数声明中的应用 在函数声明中,const 可以修饰函数的返回值,或某个参数;对于成员函数,还可以修饰是整个函数。1) 修饰参数的const,如 void fun0(const A* a ); void fun1(const A& a); 调用函数的时候,用相应的变量初始化const常量,则在函数体中,按照const所修饰的部分进行常量化,如形参为const A* a,则不能对传递进来的指针的内容进行改变,保护了原指针所指向的内容;如形参为const A& a,则不能对传递进来的引用对象进行改变,保护了原对象的属性。 :参数const通常用于参数为指针或引用的情况,且只能修饰输入参数;若输入参数采用“值传递”方式,由于函数将自动产生临时变量用于复制该参数,该参数本就不需要保护,所以不用const修饰。 对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const引用传递”,目的是为了提高效率。例如,将void Func(A a)改为void Func(const A &a) 对于内部数据类型的输入参数,不要将“值传递”的方式改为“const引用传递”。否则既达不到提高效率的目的,又降低了函数的可理解性。例如void Func(int x)不应该改为void Func(const int &x)2) 修饰返回值的const,如const A fun2( ); const A* fun3( ); 这样声明了返回值后,const按照"修饰原则"进行修饰,起到相应的保护作用。 1) 一般情况下,函数的返回值为某个对象时,如果将其声明为const时,多用于操作符的重载。通常,不建议用const修饰函数的返回值类型为某个对象或对某个对象引用的情况。2)如果给采用“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。6. 类成员函数中const的使用 一般放在函数体后,形如:void fun() const; 任何不会修改数据成员的函数都因该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其他非const成员函数,编译器将报错,这大大提高了程序的健壮性。7. 使用const的一些建议 1 要大胆的使用const,这将给你带来无尽的益处,但前提是你必须搞清楚原委; 2 要避免最一般的赋值操作错误,如将const变量赋值,具体可见思考题; 3 在参数中使用const应该使用引用或指针,而不是一般的对象实例,原因同上; 4 const在成员函数中的三种用法(参数、返回值、函数)要很好的使用; 5 不要轻易的将函数的返回值类型定为const; 6除了重载操作符外一般不要将返回值类型定为对某个对象的const引用;

C语言的const关键字与指针搭配使用

C语言的const关键字与指针搭配使用,const是C语言中保留的一个关键字,它用来限定一个变量是只读的,即不可变的。程序中使用const可以在一定程度上提高程序的健壮性,但是程序中使用过多的const,可能在对代码的阅读时增加一定的难度。(1)用const修饰一般变量注意在C语言中,用const修饰的变量必须在声明时进行初始化(用来修饰函数的形参除外);如:const int n; 这种声明方式是错误的const int n=5; 正确void fun(const int n); 正确const char a; 错误char * const p; 错误const char *p;正确(注意这种为什么是正确的),因为这里const是修饰p指向的变量,而不是指针变量p本身一旦一个变量被const修饰后,在程序中除初始化外对这个变量进行的赋值都是错误的。如:const int n=5;n=3; 错误(2)const与指针搭配使用首先必须弄清楚两个基础概念:指针常量和常量指针指针常量:即指针本身的值是不可改变的,而指针指向的变量的值是可以改变的;常量指针:即指针指向的变量的值是不可改变的,而指针本身的值是可以改变的;可以这样去理解:因为指针本身也是一个变量,只不过指针存放的是地址而已,而一旦指针变成了常量,即指针本身的值是不可变的,此时指针只能指向固定的存储单元;指针一般会指向一个变量,如果该变量成为一个常量,那么该变量的值就不能被修改,即常量指针,指针指向的是一个不可变的变量。如:1 int a=3;2 const int *p=a;3 int const *p1=a;4 *p=4;5 a=4; 第2行和第3行是等价的;第四行是错误的,因为用const限定p指向的变量的值是不可修改的,即不可通过指针p去修改变量a的值;第五行是正确的,因为a本身没用const进行修饰,即a本身的值是可以修改的.1 int a=1; 2 int b=2; 3 const int *p; 4 int const *p1; 5 int * const p2; 6 int * const p3=b 7 p=a; 8 p1=a; 9 p2=b;10 p3=a; 第3、4、7、8行是正确的;第5行是错误的,第6行是正确的,第10行是错误的,因为const在’*’后面,表示是来修饰指针变量本身,因此在声明时必须进行初始化,并且在后面不能再指向其它的变量.#includestdio.hint main(void){ const int a=3; int *pa=a; *pa=4; printf("%d\n",*pa); printf("%d\n",a); return 0;}编译结果:e:\c++\test\test.c(6) : warning C4090: ’initializing’ : different ’const’ qualifiers输出结果是: 44从这里可以看出a的值被修改了,在C语言中用const去修饰整形变量a,即a的值是不可变的,不能显示地通过赋值语句去改变a的值,但是不代表在程序中不能通过其它方法来修改这个值。总结:(1)在C语言中用const去修饰一个变量,表示这个变量是只读的,不可通过显式的调用a去修改a的值,并且此时a仍然是一个变 量,不能等同于常量;(2)要注意const在声明变量时所处的位置,位置不同,在意义上可能会有很大的不同。如果const在’*’左边,则表示指针指向的变量的值不可变;如果const在’*’右边,则表示指针的值是不可变的;

关键字const的含义及其作用

      const是一个修饰符,被修饰的对象或者变量是不可修改的,也就是说const可读不可改,const在谁的后面const就修饰谁,如果const在最前面,那么将const后移一位即可,二者是等效的。 const有以下这几个作用:(1)如果我们想要阻止一个变量被改变,那么我们就可以使用const关键字来修饰它,由于被const修饰的对象或者变量是可读不可写的,因此我们在使用const的使用要对所修饰的对象或者变量进行初始化,否则以后没有机会再改变他的值。(2)对于指针来说,const可以修饰指针本身,也可以修饰指针所指的数据,也可以修饰两者。(3)在对一个函数进行声明的时候,可以使用const对形参进行修饰,表明它是一个输入参数,在函数的内部不可写。(4)对于类的成员函数,如果被const修饰,表明它是一个常函数,不能修改类的成员变量。(5)对于类的成员函数,有时候必须指定其返回值类型是const,这样使得该函数的返回值不是“左值”。

const int a; int const a; const int *a; int * const a; int const * a const; 之间的区别

const int a; int const a; 这两个写法是等同的,表示a是一个int常量。const int *a; 表示a是一个指针,可以任意指向int常量或者int变量,它总是把它所指向的目标当作一个int常量。也可以写成int const* a;含义相同。int * const a; 表示a是一个指针常量,初始化的时候必须固定指向一个int变量,之后就不能再指向别的地方了。int const * a const;这个写法没有,倒是可以写成int const * const a;表示a是一个指针常量,初始化的时候必须固定指向一个int常量或者int变量,之后就不能再指向别的地方了,它总是把它所指向的目标当作一个int常量。也可以写成const int* const a;含义相同。

const修饰指针(C++ const 用法)

本文编辑:admin

本文相关文章:


const修饰指针(关键字const的含义及其作用)

const修饰指针(关键字const的含义及其作用)

本文目录关键字const的含义及其作用const int a; int const a; const int *a; int * const a; int const * a const; 之间的区别C++ const 用法C语言的cons

2024年3月15日 15:45

更多文章:


电驴搜索不了(电驴为什么搜索失败)

电驴搜索不了(电驴为什么搜索失败)

本文目录电驴为什么搜索失败电驴不能搜索了吗为什么电驴连接上了却搜索不到东西电驴为什么搜索失败  检查一下,eD2K和Kad网络是否能够正常连接。如果都正常就是版本太过陈旧,换个版本就可以。  eDonkey网络(英文:eDonkey Net

2023年6月2日 07:20

哪个网站能接受中国云短信?黔农云短信签约是什么意思

哪个网站能接受中国云短信?黔农云短信签约是什么意思

这篇文章给大家聊聊关于云短信,以及哪个网站能接受中国云短信对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录哪个网站能接受中国云短信黔农云短信签约是什么意思小米云短信恢复延迟显示多久短信平台是什么京东科技云短信是不是真的京东科技

2024年5月14日 21:05

中国移动宽带测速(浙江移动1000兆wifi测速是多少)

中国移动宽带测速(浙江移动1000兆wifi测速是多少)

本篇文章给大家谈谈中国移动宽带测速,以及浙江移动1000兆wifi测速是多少对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录浙江移动1000

2024年7月24日 15:12

vs2017安装教程(安装visual studio2017时老出问题)

vs2017安装教程(安装visual studio2017时老出问题)

大家好,如果您还对vs2017安装教程不太了解,没有关系,今天就由本站为大家分享vs2017安装教程的知识,包括安装visual studio2017时老出问题的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录安装v

2024年7月10日 02:23

春雨直播在线下载(春雨医生怎么看直播 春雨直播查看方法)

春雨直播在线下载(春雨医生怎么看直播 春雨直播查看方法)

大家好,关于春雨直播在线下载很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于春雨医生怎么看直播 春雨直播查看方法的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2024年7月17日 21:08

剪切快捷键ctrl加什么(剪切快捷键是什么 剪切快捷键Ctrl+X)

剪切快捷键ctrl加什么(剪切快捷键是什么 剪切快捷键Ctrl+X)

其实剪切快捷键ctrl加什么的问题并不复杂,但是又很多的朋友都不太了解剪切快捷键是什么 剪切快捷键Ctrl+X,因此呢,今天小编就来为大家分享剪切快捷键ctrl加什么的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目

2024年5月24日 07:10

部落冲突破解版(部落冲突破解版到底有没有,如果有是不是真的啊)

部落冲突破解版(部落冲突破解版到底有没有,如果有是不是真的啊)

大家好,如果您还对部落冲突破解版不太了解,没有关系,今天就由本站为大家分享部落冲突破解版的知识,包括部落冲突破解版到底有没有,如果有是不是真的啊的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录部落冲突破解版到底有没

2024年5月6日 20:18

怎样登陆手机定位官方网站怎样登陆精确手机定位网站怎样登陆手机定位精确网怎样实现精确手机定位?手机定位网

怎样登陆手机定位官方网站怎样登陆精确手机定位网站怎样登陆手机定位精确网怎样实现精确手机定位?手机定位网

本文目录怎样登陆手机定位官方网站怎样登陆精确手机定位网站怎样登陆手机定位精确网怎样实现精确手机定位手机定位网手机网络定位是怎么实现的手机定位网是真的吗手机定位那个网最好如何通过网络定位手机怎样登陆手机定位官方网站怎样登陆精确手机定位网站怎样

2024年6月21日 13:40

视频录制软件免费版哪个好(有什么免费的视频制作软件)

视频录制软件免费版哪个好(有什么免费的视频制作软件)

大家好,关于视频录制软件免费版哪个好很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于有什么免费的视频制作软件的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文

2024年7月19日 02:10

免费字体转换器(语音转文字软件app免费)

免费字体转换器(语音转文字软件app免费)

大家好,今天小编来为大家解答以下的问题,关于免费字体转换器,语音转文字软件app免费这个很多人还不知道,现在让我们一起来看看吧!本文目录语音转文字软件app免费英语花体字转换器有哪些有什么软件可以把正楷字条换成行楷字体转换器书法字体在线转换

2024年10月8日 18:30

999999999钻石修改器(微信小程序游戏修改器哪个好)

999999999钻石修改器(微信小程序游戏修改器哪个好)

本篇文章给大家谈谈999999999钻石修改器,以及微信小程序游戏修改器哪个好对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录微信小程序游戏

2024年10月9日 15:33

dnf好感度查询器(dnf好感度系统)

dnf好感度查询器(dnf好感度系统)

本文目录dnf好感度系统DNF第九章好感度查询器dnf好感度系统1、20级是最低限制条件,20级以上所有NPC都能喂了2、所有NPC都能送,每个NPC需要的材料都不一样,每次喂5个(或5个以上)材料给NPC,最多每个NPC喂20次,信赖、好

2023年9月16日 16:00

教你拼音打字软件下载(学拼音打字练习软件)

教你拼音打字软件下载(学拼音打字练习软件)

大家好,关于教你拼音打字软件下载很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于学拼音打字练习软件的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录学拼音

2024年5月21日 19:34

qq飞车皮肤修改器(qq飞车ve修改器怎么用)

qq飞车皮肤修改器(qq飞车ve修改器怎么用)

本篇文章给大家谈谈qq飞车皮肤修改器,以及qq飞车ve修改器怎么用对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录qq飞车ve修改器怎么用qq飞车ve修改器怎么用ce修改器可以修改qq飞车吗qq飞车ce修改器怎么用qq飞车中的

2024年6月8日 18:35

陪孩子听有声书,可以起到阅读的效果吗?好听的有声小说推荐

陪孩子听有声书,可以起到阅读的效果吗?好听的有声小说推荐

这篇文章给大家聊聊关于有声听书,以及陪孩子听有声书,可以起到阅读的效果吗对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录陪孩子听有声书,可以起到阅读的效果吗好听的有声小说推荐为什么有声听书吧用流量能播,连WiFi不能播有什么免

2024年5月7日 09:21

新华字典app免费下载(推荐一下免费的,汉语词典手机应用)

新华字典app免费下载(推荐一下免费的,汉语词典手机应用)

各位老铁们,大家好,今天由我来为大家分享新华字典app免费下载,以及推荐一下免费的,汉语词典手机应用的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录

2024年6月8日 10:44

英雄联盟哪个英雄厉害(lol里最厉害的英雄)

英雄联盟哪个英雄厉害(lol里最厉害的英雄)

本文目录lol里最厉害的英雄《英雄联盟》前期、中期、后期,到了后期最强的英雄有哪些英雄联盟中,哪个中单的游走能力是最强的lol里最厉害的英雄你好很高兴为你解答。在英雄联盟里没有最厉害的英雄,都是相互克制,都是需要操作技巧和配合的。只要有技巧

2024年6月30日 23:39

下载作业帮免费下载(作业帮在哪里下载,怎么安装作业帮)

下载作业帮免费下载(作业帮在哪里下载,怎么安装作业帮)

大家好,如果您还对下载作业帮免费下载不太了解,没有关系,今天就由本站为大家分享下载作业帮免费下载的知识,包括作业帮在哪里下载,怎么安装作业帮的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录作业帮在哪里下载,怎么安装

2024年10月10日 22:55

超级浏览器下载安装(电脑怎么下载浏览器 电脑下载浏览器的方法)

超级浏览器下载安装(电脑怎么下载浏览器 电脑下载浏览器的方法)

“超级浏览器下载安装”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看超级浏览器下载安装(电脑怎么下载浏览器 电脑下载浏览器的方法)!本文目录电脑怎么下载浏览器 电脑下载浏览器的方法电脑上怎么下载“ie浏览器”电脑没有安全卫士

2024年8月24日 22:05

烧饼修改器官网(有哪些不用root就可以使用的修改器操作流程是什么)

烧饼修改器官网(有哪些不用root就可以使用的修改器操作流程是什么)

本文目录有哪些不用root就可以使用的修改器操作流程是什么烧饼修改器使用教程老是下载到盗版烧饼修改器求给一个正版官网!烧饼游戏修改器在哪里能够下到官方版为什么烧饼修改器打不开有哪些不用root就可以使用的修改器操作流程是什么谢谢邀请!我们先

2024年7月23日 19:30

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2342
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1735
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1168
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1164
标签列表

热门搜索