1.下列哪两个是等同的()
int b;
const int *a = &b; // 1
const * int a = &b; // 2
const int* const a = &b; // 3
int const* const a = &b; // 4
A.1,4
B.1,2
C.3,4
D.2,3
正确答案:C
解析:第一个 含义是 a 是指针 指向 int 这个int 是静态的 const 修饰的是int 第二个 语法错误 第三个 a 是静态的指针(第二个const 修饰),指向 int ,这个int是静态的(第一个const 修饰) 第四个 a 是静态的指针(第二个const 修饰),指向一个静态的变量(第一个const 修饰, 这个变量是int的) 故3、4相等。选C
总结
*如果 const 位于 * 的左侧,则 const 就是用来修饰指针所指向的变量,即指针指向为常量; 如果 const 位于 * 的右侧, const 就是修饰指针本身,即指针本身是常量。 换句话说,如果const靠近数据类型,就是修饰该类型的变量为常量 : const int x=20;//定义int类型的符号常量x,x=10 const int p=&x;//定义指向常量的指针p,可以改变指针的指向,但是不能通过指针来改变 x中的值 如果:const靠近指针,就是定义这个指针为常指针 例: int * const p2=&x;//定义常指针p2,不可改变指针的指向(常指针),但可以通过指针来修改x中的值 如果,有两个const一起修饰: 例: const int * const p3=&x;//不可以修改指针的指向,也不能修改通过指针修改变量的值