http://blog.csdn.net/zhangheng837964767/article/details/33783511函数
关键问题点:const 属于修饰符 ,关键是看const 修饰的位置在那里
一、const int *a
这里const 修饰的是int,而int定义的是一个整值
所以*a 所指向的对象 值 不能经过 *a 来修改,可是 能够从新给 a 来赋值,使其指向不一样的对象
eg:
const int *a = 0;
const int b = 1;
int c = 1;
a = &b //ok! 额外:注意不能经过a 来修改 b值
a = &c //ok! 额外:虽然c自己不是一个常量
*a = 2 //erro! 为题就在这里,不能修改经过 *a 所指向的对象值,最后赋值得对象是c,所以不能经过*a 来修改c值。
二、int *const a
这里const修饰的是 a ,a表明的是一个指针地址
所以不能赋给a其余的地址值,但能够修改a指向的值
这有点和cont int *a相反的意味,例子就不说了
三、至于int const *a 和 const int *a 的意义是相同的 他们两个的做用等价
补充:
四、const int * const a
这个表明a所指向的对象的值以及它的地址自己都不能被改变spa
五、 const int *const a.net
a所指向的对象及对象的值均不可改变。指针
关于const的点滴补充:
一、const 对象的地址只能赋值给指向const 对象的指针
二、指向const 对象的指针能够 被赋 以 一个非const 对象的地址
三、指向const 得指针常被用做函数的形式参数,保证被传递给函数的实际对象在函数得实际对象在函数中不会被修改
四、常量在定义后就不能被修改,因此它必须被初始化。未初始化的常量定义将致使编译错误(上面都是在说明const得问题,因此没有赋值,实际语句中要赋值的)对象
一、若是const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;若是const位于星号的右侧,const就是修饰指针自己,即指针自己是常量。
二、所以,const int *a;和 int const *a;的状况相同,都是指针所指向的内容为常量(const放在变量声明符的位置无关),这种状况下不容许对内容进行更改操做,如不能*a = 3 ; ,int *const a;为指针自己是常量,而指针所指向的内容不是常量,这种状况下不能对指针自己进行更改操做,如a++是错误的。
三、const int* const a;为指针自己和指向的内容均为常量。