[原创]看c和指针关于const的理解,大牛勿喷,只是个人理解
#include <stdio.h>
void main()
{
//int const i ; //const object must be initialized if not extern。变量const i如果不是一个外部变量(extern),在声明时必须初始化。(1)
int const i = 5;
int *pi;
int const *cpi; //可以不初始化
int * const pci = NULL; //必须初始化
int a, b /* c */;
pi = &a;
cpi = &b;
//*cpi = 10; //error : *cpi's value is const, cannot be modified。 cpi是个指针变量,而*cpi是个常量被修饰为const不可变,故给*cpi赋值会报错 (2)
cpi = &a; //correct: cpi is a value can be modified 。cpi是个变量值可以被修改。
cpi = &b;
*pci = 10; //correct
// pci = &a; //error: pci can not be modified。pci是一个const变量,不可变,而他指向的值可变。
const int *p1; //.c文件这样写编译不通过,.cpp可以.在VC6.0下const int *p1和int const *p2编译不通过,CODEBLOCKS就可以编译
int const *p2;
//*p1 = 10 ; //error
//*p2 = 15; //error
p1 = &a; //correct
p2 = &b; //const int *p与int const *p 这种写法没区别
int const * const cpci; //在VC6.0下源文件为.c编译不通过。CODEBLOCKS就可以编译
//最后关于const修饰的指针变量可以这么理解
//把const 看成是一个类型而int也是个类型,*p也看成是个类型,类型和类型结合,变量名看成是个个体
//const int *p (counst int) (*p)而const int是不可变的所以*p不可变,但是p可变
//int const *p (int count) (*p)同上
//int * const pci(int * const)(pci) pci不可变,*pci可变,且必须初始化。
}
