今天晚上琢磨了一个晚上,终于大致弄明白const的用法其总结如下:
关于const的含义:
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。我之前也难以看出,究竟那个是变的,那个不变?必须提醒一下*a是代表值而a是代表指针。那么就有一下的结论了
1)const在前面(即放在类型前面)
const int a; //a是const
const char *a; //*a是const, a可变
const char* const a; //a和*a都是const
2)const在后面,与上面的声明对等
int const a; //a是const
char const * a; //*a是const, a可变
char* const a; //a是const,*a可变
char const* const a; //a和*a都是const
特例分析:
const int *a、int const *a、int *const a三种特例
①const int *a (
整型数是不可修改的,但指针可以)
:
:
:
②int const *a【暂时不知道】
:
:
:
③int *const a (
指针指向的整型数是可以修改的,但指针是不可修改的)
:
:
:
然后把上面的进行一一对应:
①
const int *a(
整型数是不可修改的,但指针可以)
对应: const char *a(*a是const,a是可以改变)
②
int const *a【暂时不知道】
对应 char const *a(*a是const,a是可以改变)
从而得除const放在修饰类型的前面或者后面,不影响结果
③
int *const a(指针指向的整型数是可以修改的,但指针是不可修改的)
对应 char *const a(*a是可以改变的,a是const)
结论:const与谁靠得最近就影响到谁,const放在数据类型(char、int ......)前后都是相同的。