C/C++中的const int *a与int *const a,const int *const a [TOC] ----------- 【参考链接】[const int *a与int *const a,const int *const a的区别](https://blog.csdn.net/zhangheng837964767/article/details/33783511) ----------- 关键问题点:const属于修饰符,关键是看const修饰的位置在那里 # 1.`const int *a` 这里const 修饰的是int,而int定义的是一个整值,因此*a 所指向的对象值不能通过*a来修改,但是 可以重新给 a 来赋值,使其指向不同的对象。 例子: ```C++ const int *a = 0; const int b = 1; int c = 1; a = &b; //ok! 额外:注意不能通过a 来修改 b值 a = &c; //ok! 额外:虽然c本身不是一个常量 *a = 2; //errno! 为题就在这里,不能修改通过 *a 所指向的对象值,最后赋值得对象是c,因此不能通过*a 来修改c值。 ``` # 2.`int *const a` 这里const修饰的是a,a代表的是一个指针地址,因此不能赋给a其他的地址值,但可以修改a指向的值,这有点和cont int *a相反的意味,例子就不说了 # 3.`int const *a 和 const int *a` 他们的意义是相同的 他们两个的作用等价 # 4.`const int * const a` 这个代表a所指向的对象的值以及它的地址本身都不能被改变 # 5.`const int *const a` a所指向的对象及对象的值均不可改变。 # 6.关于`const`的点滴补充 - const 对象的地址只能赋值给指向const 对象的指针; - 指向const 对象的指针可以 被赋 以 一个非const 对象的地址; - 指向const 得指针常被用作函数的形式参数,保证被传递给函数的实际对象在函数得实际对象在函数中不会被修改; - 常量在定义后就不能被修改,所以它必须被初始化。未初始化的常量定义将导致编译错误(上面都是在说明const得问题,所以没有赋值,实际语句中要赋值的)。