const和#define的不同以及 const修饰指针的几种情况
来源:互联网 发布:淘宝网logo图标 编辑:程序博客网 时间:2024/05/07 22:09
C++语言中可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的优点。
1、const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意想不到的错误(边际效应)。
2、有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。在c++程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。
const修饰指针
一般分为如下4种情况:
int b = 500;const int *a = &b //情况1int const *a = &b;//情况2int* const a = &b;//情况3const int* const a = &b;//情况4
如何区别呢?
1)先看情况1
如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身就是常量。因此,1和2情况相同,都是指针指向的内容为常量(const放在变量声明符的位置无关),这种情况不允许对内容进行更改操作。
换句话来说,如果a是一名仓库管理员的话,他所进入的仓库,里面的货物(*a)是他没有权限动的,仓库里面的东西原来是什么就是什么;所以
int b = 500;const int *a = &b;*a = 600;//错误
但是也有别的方法改变*a的值,一是通过改变b的值:
int b = 500;const int *a = &b;b = 600;cout<<*a<<endl;//得到600
还有一种方法就是a指向别处;
2)情况2和情况1相同。
3)情况3指针本身为常量,这种情况下不能对指针本身进行更改操作,而指针所指向的内容不是常量。
举例来说:如果a是一名仓库管理员的话,他只能进入指定的某仓库,而不能去别的仓库(所以a++是错误的)
;但这个仓库里面的货物(*a)是可以随便动的。(*a=600是正确的)。
###此外,对于情况3:定义试必须初始化。
int b = 500,c = 600; int* const a;//错误,没有初始化 int* const a = &b;//正确,必须初始化 *a = 600;//正确,允许改值 cout<<a++<<endl;//错误
对于情况4为指针本身和指向的内容均为常量。那么这个仓库管理员只能去特定的仓库,并且仓库里面的所有的货物他都没有权限改变。
0 0
- const和#define的不同以及 const修饰指针的几种情况
- const 修饰指针的4种情况
- const修饰指针的四种情况
- 整理:#define和typedefine的区别 以及const修饰指针的用法
- VC++ const修饰指针的情况介绍
- const修饰指针的三种情况区别
- const修饰指针和引用的用法
- const修饰指针和引用的用法
- const修饰指针和引用的用法
- const修饰指针和引用的用法
- const修饰指针和引用的用法
- const与define的不同
- 程序员面试(3):关于const修饰指针的情况
- const修饰符,以及指针常量,常量指针的理解
- 20170911_指针常量和常量指针的区别以及const和define的区别
- const 修饰指针的三种写法
- const修饰指针的4种形式
- const 修饰指针的问题
- 网站文章更新质量高于数量
- PS打造漂亮的数码金属水晶按钮
- 利用SVD简化数据
- POJ-3211 Washing Clothes
- 简单的朋友圈界面-Android(一)
- const和#define的不同以及 const修饰指针的几种情况
- JDK与设计模式:装饰模式
- cc150:字符串:1.8
- 【南理oj】366 - D的小L(STL - 全排列)
- java 枚举 循环遍历以及一些简单常见的使用
- 链表
- 2016年读书总结(一)
- 如果你知道如何使用这个技能,就根本不需要担心工作了……
- 把数组排成最小的数34