对const的理解

const是一个C中类似修饰符。
常见的数据类型修饰符有哪些?
short long unsigned signed static auto extern register,volatile
如何定义一个变量?
类型描述符 变量名
类型描述符包括 类型的修饰符以及数据类型 int char float ,以及自己定义的数据类型……
(1)类型描述符中,如果有多个关键字,他们出现的顺序不影响他对变量的限制

short int i;
int short i;
static int short i;
int static short i;
const int a;
int const a;

以上表达完全一样,描述的都是一个const的整形变量。

(2)

const int * a;
int * const a;
int const * const a;

对指针变量类型的理解:
(a)*在数据定义时与在表达式中一样的理解,例如:

int * a[10];  //因为[]优先级高于*,因此是一个数组,每个成员类型为指针,指向int
int (*)a[10]; //因为()优先级高于[], 因此,先看里面,是一个指针,指向的类型为一个数组。

(b)指针的判断从右向左。

const int * a;      //a是变量名,*表示他是一个指针(类型已经确定),余下的是指向的类型。
                    //因此,a是一个指向const int的指针,即指向的数据不可修改。
int * const a;      //*const 一起来修饰a,即a只读,*表示a是一个指针
                    //因此,这是一个只读的指针,指向的类型为int型的变量
int const * const a; //*表示指针,因此,指针不可修改,int const 是指针指向的类型,仍然是const

在编程中能用const的地方要尽量使用const
const存储在只读区域

typedef void * VP;
const void * ptr;   //指针变量,指向const void 常量
const VP ptr;       //const 指针,指向void变量
                    //他们存储的位置不一样

首先要理解typedef是定义一种数据类型,与define区分开,define是简单的替换

typedef void * VP;    //VP是名字,余下的是这个类型的真是类型
const VP ptr;         //并不是简单的替换为const void * ptr!!, void * 是一个整体,
const int i; == int const i;
VP const ptr; == void * const ptr; 

作用:
(1)向其他程序员传递一个信息,这个不要修改
(2)有可能让编译器产生更精简的代码,减少bug
(3)合理的保护只读数据,避免不必要的修改
使用位置:
(1)定义常量,防止被修改
(2)在函数参数中,如果不期望子函数去修改被调用函数的某个数据,可以加以限制。例如:

char * strcpy(char * dest, const char * src);
char * strncpy(char * dest, const char * src, size_t n);

(3)在c++中类的成员函数的使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值