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++中类的成员函数的使用