Highlight
1. const 修饰基本类型
2. const和指针
3. typedef & const
4. const用法和使用位置
1. const 修饰基本类型
const int a int const a
上面两个都一样,描述的都是一个const的整形变量,存放在只读区域
2. const和指针
1. const int * a 2. int *const a 3. int const* const a
对指针的理解
int *a[10] []优先级高于*,是一个数组,每个成员类型为指针,指向int
int (*a)[10] ()优先级高于[] 是一个指针,指向的类型是一个数组
指针的判断从右向左
1). const int*a //a是一个指向const int的指针 指向的数据不可以修改
2). int *const a //只读的指针,指向的类型为int类型的变量
3). int const* const a //指针不可修改, int const是指针指向的类型,仍然是const
1 #include <stdio.h> 2 3 int main() 4 { 5 char static data_var=‘c‘; 6 char const data_const=‘a‘; 7 8 char *const p1=&data_var; 9 const char* p2=&data_const; 14 p1=&data_var; // 报错!!!! p1 不能修改指针 15 *p1=‘W‘; // 编译通过 p1 可以修改数据 16 17 p2=&data_var; // 编译通过 p2可以修改 18 *p2=‘a‘; // 报错!!! p2不可以修改数据 19 20 }
3. typedef & const
问题: const void * ptr 和 const vp ptr 的存储位置是否一样
typedef void*VP; const void * ptr; 存储位置: const VP ptr; 存储位置:
1). 了解基本存储位置
const类型变量 只读区域 ---linux里--const类型变量----代码段
全局&静态 数据段 bs段
局部 栈里面
2). typedef
typedef定义一种数据类型, 一定要与define区分开
所以代码中的 typedef void* VP; //VP 是类型名字,其余的是这个类型的真实类型
const VP ptr
-->思考: 是不是替换为 const void *ptr??? 不是, void *是一个整体
上面已经说过 const int i == int const i; 所以 VP const prt 既 void *const ptr
const VP ptr == void * const ptr;
所以上面两个存储位置不同
4. const用法和使用位置
作用
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++类的成员函数