对const的理解:
const关键字用来做什么?
const是C中类型修饰符,用来修饰数据类型。常见的数据类型修饰符有 short long unsigned signed static extern register volatile.
类型描述符中如果有多个关键字,它们出现的位置不影响它对变量的限制。如const int a 与 int const int a完全一样,描述的都是一个const的整型变量。
对指针类型的理解:
eg: int * a[10]; //[]的优先级高于*, 因此是一个数组,每个成员类型为指针,指向int;
int (*a)[10]; //因为()优先级高于[], 因此先看()里面的, 是一个指针,指向的类型是一个数组。
指针的判断从右向左。
const int *a; //a是变量名, *表示它是一个指针(类型已经确认),余下的是指向的类型,因此,a是一个指向const int 的指针,即指向的数据不可改变。
int* const a; // * const 一起来修饰a,即a只读,*表示a是一个指针,因此这是一个只读的指针,指向的类型为int型的变量。
int const* const a; // *表示指针,因此指针不可修改, int const是指针指向的类型,仍然是const。
首先, typedef是定义一种数据类型。与define区分开,define只是替换。
typedef void* VP; //VP是类型名字,余下的是这个类型的真是类型(void*)。
const VP ptr;是否替换为const void *ptr?? No!!!, void * 是一个整体。
const VP ptr ---> VP const ptr ---> void* const ptr; 其中 const 修饰ptr。
const作用:
(1)告诉程序猿此处莫修改。
(2)有可能让编译器产生更精简紧凑的代码,减少BUG。
(3)保护只读数据,避免不恰当操作导致的错误。
const使用:
(1)定义常量,防止被修改。
(2)函数参数中,不期望子函数修改调用函数的某些数据,可以加const限制。
(3)在C++中,类的成员函数的使用。
const关键字用来做什么?
const是C中类型修饰符,用来修饰数据类型。常见的数据类型修饰符有 short long unsigned signed static extern register volatile.
类型描述符中如果有多个关键字,它们出现的位置不影响它对变量的限制。如const int a 与 int const int a完全一样,描述的都是一个const的整型变量。
对指针类型的理解:
eg: int * a[10]; //[]的优先级高于*, 因此是一个数组,每个成员类型为指针,指向int;
int (*a)[10]; //因为()优先级高于[], 因此先看()里面的, 是一个指针,指向的类型是一个数组。
指针的判断从右向左。
const int *a; //a是变量名, *表示它是一个指针(类型已经确认),余下的是指向的类型,因此,a是一个指向const int 的指针,即指向的数据不可改变。
int* const a; // * const 一起来修饰a,即a只读,*表示a是一个指针,因此这是一个只读的指针,指向的类型为int型的变量。
int const* const a; // *表示指针,因此指针不可修改, int const是指针指向的类型,仍然是const。
为什么用const?
首先, typedef是定义一种数据类型。与define区分开,define只是替换。
typedef void* VP; //VP是类型名字,余下的是这个类型的真是类型(void*)。
const VP ptr;是否替换为const void *ptr?? No!!!, void * 是一个整体。
const VP ptr ---> VP const ptr ---> void* const ptr; 其中 const 修饰ptr。
const作用:
(1)告诉程序猿此处莫修改。
(2)有可能让编译器产生更精简紧凑的代码,减少BUG。
(3)保护只读数据,避免不恰当操作导致的错误。
const使用:
(1)定义常量,防止被修改。
(2)函数参数中,不期望子函数修改调用函数的某些数据,可以加const限制。
(3)在C++中,类的成员函数的使用。