int const *
int const *是指向常量整数的指针
这意味着要声明的变量是一个指向常量整数的指针。实际上,这意味着指针指向了不应更改的值。在这种情况下,常量限定符不会影响指针,因此允许该指针指向其他地址。
第一个const关键字可以位于数据类型的任何一侧,因此int const *等同于const int * 。
#include
int main(){
const int q = 5;
int const* p = &q;
//Compilation error
*p = 7;
const int q2 = 7;
//Valid
p = &q2;
return 0;
}
int * const
int * const是指向整数的常量指针
这意味着要声明的变量是指向整数的常量指针。实际上,这意味着指针不应指向其他地址。在这种情况下,const限定符不会影响integer的值,因此允许更改存储在地址中的值。
#include
int main(){
const int q = 5;
//Compilation error
int *const p = &q;
//Valid
*p = 7;
const int q2 = 7;
//Compilation error
p = &q2;
return 0;
}
const int * const
const int * const是指向常量整数的常量指针
这意味着声明的变量是指向常量整数的常量指针。有效地,这意味着常数指针指向常数值。因此,指针既不应指向新地址,也不应更改所指向的值。
第一个const关键字可以位于数据类型的任一侧,因此const int * const等效于int const * const 。
#include
int main(){
const int q = 5;
//Valid
const int* const p = &q;
//Compilation error
*p = 7;
const int q2 = 7;
//Compilation error
p = &q2;
return 0;
}
记忆图
记住语法的一种方法(根据Bjarne Stroustrup的说法)是螺旋规则-
规则说,从变量名开始,然后顺时针移动到下一个指针或类型。重复直到表达式结束。
该规则也可以看作是从右到左解码语法。
因此,
- int const *是指向const int的指针
- int * const是指向int的const指针
- int const * const是指向const int的const指针
使用此规则,即使是复杂的声明也可以被解码,例如,
- INT ** const为一个const指针指向int。
- int * const *是指向int的const指针。
- int const **是指向const int的指针。
- INT * const的* const为一个常量指针到一个const指向int。
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。