const int *p;int *const p;int const *p;const int *const a;
const int *p;和int const *p;
二者是一样的,其中const 修饰的是int,表示指针所指的对象不可以通过该指针被改变(但是不代表这个对象不可以通过其他途径改变),但是指针本身可以被改变。
eg:
#include<bits/stdc++.h> using namespace std; int a=1; int b=2; int const *x=&a; const int *y=&a; int main(){ //指针所指的对象可以从a指向b x=&b; y=&b; /* 编译错误,指针所指对象的值不可以被改变。 *x=10; *y=10; */ b=3;a=4; cout<<*x<<" "<<*y<<" "<<a<<" "<<b<<endl; //输出3 3 4 3 //从这里看出,虽然无法通过指针修改对象,但是对象的值还是可以改变。 }
int *const p;
表示可以通过该指针修改所指的对象的值,但是指针本身不能改变。
eg:
#include<bits/stdc++.h> using namespace std; int a=10; int b=5; int *const p=&a; int main(){ *p=0; //p=&b; 错误,指针不可以被改变 cout<<a<<" "<<b<<" "<<*p<<endl; //输出0 5 0 }
const int *const a;
既不能通过指针修改所指的对象的值,又不可以改变指针本身。