左定值,右定向。
左定值:当const在的左侧时,指针所指向的值保持不变(或者说,不能通过指针来修改其所指向的值)。
右定向:当const在的右侧时,指针所指的方向保持不链。
例子 1-1
#include <iostream>
using namespace std;
int main(){
const char* str1;
str1 = "mystr1";
str1[2] = 'c'; // 不允许:str1所指向的内容为定值(const),因此不允许通过str1修改
cout << str1 << endl;
}
例子1-2
#include <iostream>
using namespace std;
int main(){
int a = 8;
const int* p = &a;
*p = 9; // 不允许,p所指向的内容为定值(const),因此不允许通过p修改该值。
cout << a << endl;
}
例子1-1,1-2都会报错,指针所值对象为定值,不可以通过指针进行修改。
error: read-only variable is not assignable
但是左定值情况下可以通过其他方式修改变量值,如下例子1-2b:
#include <iostream>
using namespace std;
int main(){
int a = 8;
const int* p = &a;
// *p = 9; // 不允许,p所指向的内容为定值(const),因此不允许通过p修改该值。
a = 9; // 允许,没有通过p来修改变量值
cout << a << endl;
}
例子1-3
#include <iostream>
using namespace std;
int main(){
const char* str1;
str1 = "mystr1";
str1 = "mystr1change"; // 允许:创建了一个新对象“mystr1change"并修改str1的指向。
cout << str1 << endl;
}
例子1-4
#include <iostream>
using namespace std;
int main(){
int a = 8;
const int* p = &a;
int b = 9;
p = &b; // 允许,p指向一个新的对象b
cout << *p << endl;
}
例子1-3,1-4程序正确,其直接修改了指针的指向。