对const的理解

来源:互联网 发布:aes加密mc矩阵 编辑:程序博客网 时间:2024/05/19 17:10

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];  //因为[]优先级高于*,因此是一个数组,每个成员类型为指针,指向intint (*)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
原创粉丝点击