1.const 怎么用
const 是C语言的一个关键字
const 关键字是把变量变为一个只读的变量,绝对不是将这个变量变为常量。
也就是说经过const 修饰的变量成为只读的变量之后,那么这个变量就只能作为右值(只能赋值给别人),绝对不能成为左值(不能接收别人的赋值)。
而 C++ 则是将 const 修饰的常量变为一个真正的常量(变量的内容不可以被修改), 这一点的区别需要进行注意。当 const 变量的时候,就将这个常量放在符号表里面,编译的过程中发现使用了变量,那么就从符号表里面的值进行替换。经过const 修饰的变量,在定义的时候,就要进行初始化。
C语言const修饰不可赋值,C++ const修饰直接变常量,不可修改
const int a = 10; // 正确
const int a; // 错误
const 关键字最有用的地方是用来限定函数的形参
func(const char *ptr)
{ }
这样 ,func 函数将不会修改实参指针所指的数据,但是其他的函数却可以修改他。
const 本质上被命名为 readonly 更为合适。
2. const与指针
const在*的左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变);
const在*的右边,则指针的指向不可变。
👉 简记为“左定值,右定向”。 👈
(1)指针可以改变,指向的值不能改变
int a = 10;
const int *p1 = &a; //例如:允许 p1+=1 ,不允许 *p1=20
int const *p2 = &a; //这两句效果一样
(2)指向的值可以改变,指针不可改变
int a = 1;
int b = 2;
int *const p3 = &a; //例如:允许 *p=3 ,不允许 p3=&b
(3)指针和指向的值都不能改变
int a=10;
const int * const p4 = &a;
int const* const p4 = &a; //这两种写法一样