在面试中我们经常会被面试官问到什么是常量指针,什么又是指针常量。那么,下面就来解释一下二者的区别。
一、指针常量(int *const c)
顾名思义,指针常量本质上是一个常量。指针二字是形容词用来修饰常量,表示常量的类型是指针型。就像整型常量、浮点型常量一样,代表本身的值是不会改变的。
相应地,指针常量也就意为着作为一个值不会改变的指针,指向的物理地址是不能改变的。但这个物理地址实际上可以存放不同的数。
可以将指针常量类比于家庭住址,指针常量代表家庭住址不变。房子的实际地址不会因为里面住的人不同而改变。
可以看到,当我们改变指针指向时,编译器会报错。
二、常量指针(const int *c, int const *c)
同样,常量指针的本质是一个普通的指针。与其他类型的指针只有指向数据类型的区别。const int 是一个 int 类型的常量,而常量指针正是指向这样的常量的一种指针例如指向const float test1;的指针亦或指向const char ch;的指针,都被叫做常量指针。因为指针指向的变量的值不可通过该指针修改(但直接改变量是可以的)。
可以看到,当我们通过指针视图修改指向的内容时,编译器报错。