简述
在C语言中const与指针(*)类型常常令我们感到头疼,究竟如何区分它们网上也是各有各的说法,这里我就个人而言谈谈自己的看法。
含义
const int a; // 指向const int; a不能被修改
int const a; // 指向const int; a不能被修改
const int *a; // 指向const int的指针; a可以被修改, *a不能被修改
int const *a; // 指向const int的指针; a可以被修改, *a不能被修改
int* const a; // 指向int的指针; a不能被修改, *a可以被修改
int const * const a; // 指向const对象的const int指针; a不能被修改, *a不能被修改
const int * const a; // 指向const对象的const int指针; a不能被修改, *a不能被修改
鉴别
const int a 与 int const a:
const int a; // 指向const int; a不能被修改
int const a; // 指向const int; a不能被修改
// 省略变量类型后
const a; // a的左边紧跟着const, cosnt修饰的是a, 所以a不能被修改
const a;
const int *a 与 int const *a:
const int *a; // 指向const int的指针; a可以被修改, *a不能被修改
int const *a; // 指向const int的指针; a可以被修改, *a不能被修改
// 省略变量类型后
const *a; // a的左边紧跟着*, *a左边紧跟着const, const修饰的是*a, 所以a可以被修改, *a不能被修改
const *a;
int* const a:
int* const a; // 指向int的指针; a不能被修改, *a可以被修改
// 省略变量类型后
* const a; // a的左边紧跟着const, *a左边没有修饰, const修饰的是a, 所以a不能被修改, *a可以被修改
int const * const a 与 const int * const a:
int const * const a; // 指向const对象的const int指针; a不能被修改, *a不能被修改
const int * const a; // 指向const对象的const int指针; a不能被修改, *a不能被修改
// 省略变量类型后
const * const a; // a的左边紧跟着const, *a左边紧跟着const, const修饰的是a与*a, 所以a不能被修改, *a不能被修改
const * const a;
主要区分方法:
1. 省略变量的类型;
2. 变量左边紧跟着的是不是const修饰符;