C++ —— 非类中使用const定义常量的初始化,以及#define和typedef的区别
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++ —— 非类中使用const定义常量的初始化,以及#define和typedef的区别,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2441字,纯文字阅读大概需要4分钟。
内容图文
![C++ —— 非类中使用const定义常量的初始化,以及#define和typedef的区别](/upload/InfoBanner/zyjiaocheng/855/953d2424d4ab4dcf9484450771fb0a5e.jpg)
总结一下在非类中使用const关键字定义常量时的初始化问题,亲测VS2015。顺便记录#define宏和typedef的区别。
一、首先对const声明的常量的初始化做简单小结:
![C++ —— 非类中使用const定义常量的初始化,以及#define和typedef的区别 - 文章图片](/upload/getfiles/0001/2021/5/6/20210506062611738.jpg)
![C++ —— 非类中使用const定义常量的初始化,以及#define和typedef的区别 - 文章图片](/upload/getfiles/0001/2021/5/6/20210506062611768.jpg)
1 int w1 = 1, w2 = 2, w3 = 3; 2 3 int * const p1 = &w1, P1_1; //p1:指针常量,指针是常量; 4 //p1_1:int型变量 5 int const * p2, P2_2 = 15; //p2:常量指针,指向常量的指针; 6 //p2_2:int const型 7 const int * p3, P3_3 = 16; //p3:常量指针,指向常量的指针; 8 //p3_3:const int型 9 const int temp = 17; //temp:const int,即整形常量View Code
int * const p1 = &w1; //指针常量,必须在声明时对其进行初始化,否则编译无法通过
为指针常量,即指针是常量。既然指针是常量,那就当然是必须在声明时对其进行初始化。在它的生存期内,其指向的地址是不变的(++p1,这种操作肯定就是错误的)。
但是,其指向的值是可以改变的,可以对其进行赋值操作,例如:*p1 = 12;
简言之:指针不能改变,指向的值可以改变。
int const * p2;//常量指针,即指向常量的指针,声明和初始化可以分开,p2 = &w1;
指针可以改变,例如++p2,p2++等。但是其指向的值不能改变,*p2 = 13这当然就会出错了。
int const * 和 const int *等价
const int temp = 17; //定义int型常量,那就必须要在声明时对其进行初始化赋值,并且后面不能再改变
注意:当用逗号“,”一次定义多个参数时,对于存在指针符的,除了第一个参数外,后面的参数类型都以指针符“*”左面的声明关键字为准。这也是我在初学c++时没有注意到的,但是很重要。详细见以上代码注释说明。
二、简要记录一下#define和typedef的区别
以此为例:
1 #define pint int * //在预处理阶段,代码中的pint会被替换为int* 2 typedef int * PINT;//相当于重新定义了一个数据类型PINT,PINT和int*等价
1 #define宏定义发生在预处理阶段,它只进行简单机械式的字符替换,而不进行任何检查。typedef的执行发生在编译阶段,因此有类型检查。
2 #define可以为数据类型取别名、定义常量、作为编译开关、定义简单的函数等。而typedef用来定义类型的别名,与struct结合使用等。
3 #define没有作用域的限制,对于一个源文件,只要是前面定义过的宏(无论是在函数体内还是外),在后面都可以使用。而typedef有作用域的限制,例如在同一个源文件的函数体A中定义过,那么在函数体A之外,它就是未定义的。
#define pint int * typedef int * PINT; int w1 = 1, w2 = 2, w3 = 3, w4 = 4; const pint p1, p2 = 75;//等价于:const int* p1; const int p2 = 75; pint const p3=&w3, p4;//等价于:int* const p3 = &w3; int p4; const PINT P1=&w1, P2=&w2; //类型都等价于: int* const PINT const P3=&w3, P4=&w4; //类型都等价于: int* const
欢迎交流,整理不易,转载请注明。
内容总结
以上是互联网集市为您收集整理的C++ —— 非类中使用const定义常量的初始化,以及#define和typedef的区别全部内容,希望文章能够帮你解决C++ —— 非类中使用const定义常量的初始化,以及#define和typedef的区别所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。