常量指针本质上是个指针,只不过这个指针指向的对象是常量。
特点:const 的位置在指针声明运算符 * 的左侧。只要 const 位于 * 的左侧,无论它在类型名的左边或右边,都表示指向常量的指针。(可以这样理解:* 左侧表示指针指向的对象,该对象为常量,那么该指针为常量指针。)
C++
const int * p;
int const * p;
例如:
C++
#include <iostream>
using namespace std;
int main()
{
const int c_var = 8;
const int *p = &c_var;
*p = 6; // error: assignment of read-only location '* p'
return 0;
}
例如:
C++
#include <iostream>
using namespace std;
int main()
{
const int c_var1 = 8;
const int c_var2 = 8;
const int *p = &c_var1;
p = &c_var2;
return 0;
}
指针常量的本质上是个常量,只不过这个常量的值是一个指针。
特点:const 位于指针声明操作符右侧,表明该对象本身是一个常量,* 左侧表示该指针指向的类型,即以 * 为分界线,其左侧表示指针指向的类型,右侧表示指针本身的性质。
C++
const int var;
int * const c_p = &var;
注意 1:指针常量的值是指针,这个值因为是常量,所以指针本身不能改变。
C++
#include <iostream>
using namespace std;
int main()
{
int var, var1;
int * const c_p = &var;
c_p = &var1; // error: assignment of read-only variable 'c_p'
return 0;
}
C++
#include <iostream>
using namespace std;
int main()
{
int var = 3;
int * const c_p = &var;
*c_p = 12;
return 0;
}
指向常量的指针常量,指针的指向不可修改,指针所指的内存区域中的值也不可修改。
C++
#include <iostream>
using namespace std;
int main()
{
int var, var1;
const int * const c_p = &var;
c_p = &var1; // error: assignment of read-only variable 'c_p'
*c_p = 12; // error: assignment of read-only location '*c_p'
return 0;
}
根据前三部分的结论,我们可以得到以下代码的表示内容:
C++
int ** const p; // p 是一指针常量,它是一个指向指针的指针常量;
int * const * p; // p 是一个指针,它是一个指向指针常量的指针;
int const ** p; // p 是一个指针,它是一个指向常量的指针的指针;
int * const * const p; // p 是一指针常量,它是一个指向指针常量的指针常量;
阅读量:2016
点赞量:0
收藏量:0