指针——可以是const

值——可以是const

 

指针是const

表示一旦得到了某个变量的地址,指针就不能再指向其他的变量了。

如:

int *const q = &i;//q是const
*q = 26;//OK
q++;//Error

 

指针所指的值是const

表示不能通过这个指针去修改那个变量(并不能使得那个变量变成const),可以通过别的指针去修改那个变量

如:

const int *p = &i;
*p = 26;//Error! (*p)是const
i = 26;//OK
p = &j;//OK

 

int i = 0;
const int* p1 = &i;
int const* p2 = &i;
int *const p3 = &i;

判断哪个被const了的标志是const在*的前面还是后面。

如果const在*前面,则指针指向的东西不能被修改。

如果const在*后面,则指针不能被修改。

 

const数组

const int a[] = {1,2,3,4,5,6};

数组变量其实已经是const的指针了,这里的const表明数组的每个单元都是const int,所以必须通过初始化进行赋值。

#include<iostream>
#include<cmath>
using namespace std;

int main(){
     int a = 6;
     cout<<"sizeof(a)="<<sizeof(a)<<endl;
     cout<<"sizeof(a++)="<<sizeof(a++)<<endl;
     cout<<"a="<<a<<endl;
}

在上述代码中,sizeof()运算符只会判断括号中的数据类型,并不会进行实际运算,所以最后输出的a是6。