int const a 等价于 const int a,表示a为常量,const int a个人认为养成写const int a的习惯较好,优点之后说。
int const *p表示p所指向的值不可变,可以修改p的值使其指向其他int变量,但不能是其他类型变量如char,我的理解是int和char的指针虽然大小一样,但指向的内容大小不一样。百度这一块的时候偶然看到这么一个例子:
void T(char a[])
{
cout<<sizeof(a)<<endl;
int b[5] = {1,2,3,4,5};
int *c = b;
cout<<sizeof(c)<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
char a[6] = "hello";
cout<<sizeof(a)<<endl;
T(a);
return 0;
}
输出结果为6 4 4。
因为main函数中的sizeof(a)参数是字符数组,所以计算过程是6*1 = 6。当a作为参数传递到T函数时,程序不会在栈上分配一个大小为6的数组,此时传递的是一个地址,也就是指针,所以结果为4。
int * const p表示p是一个指向整型的指针常量,它的值不能改变,也就是不能再指向其它变量,但可以改变它指向的变量的值。
所以声明int const *p时,写成const int *p,有利于与int * const p区分开来。
const int * const p(int const * const p)表示无论是指针本身还是它所指向的值都是常量。