const修饰的变量不可直接被修改,可通过指针间接修改(int a = 10;int* p = &a;*p = 20)
const可放在类型前,也可放在类型后,建议放类型前
const int a = 10;a并不是真正的常量,因为a可以被间接修该,所以int arr[a], case a都错误
const修饰的变量并非不可被修改,那const修饰变量,意义何在?
①:让编译器直接进行修改检查,若被修改直接警告或报错
②:告诉其他程序员这个变量不要改,也属于一种自描述
char* p = "hello bit"这才是真正意义上的不可被修改(关于这块的处理需了解操作系统)
const修饰数组
代表数组中的每个元素都不可被修改
const修饰指针
指针:就是一个地址
指针变量:一个变量,用来保存地址(注意区分两者的差别)
为什么要有指针?提高CPU内存寻址的效率
地址需要开辟空间存储吗?不需要,内存中每个地方的地址是由计算机规定好的
地址为只读,不能随便改
在c中,任何变量&,全都是从最低地址开始的
左值和右值的区别
int x x = 100 x的空间(把100放到x的空间里面),变量的属性,左值
int y = x x的内容,数据的属性(把x的值赋给y),右值
对指针解引用,代表指针所指向的目标
int a = 10;
const int* p = &a; int* q = p;(警告)
int* p = &a; const int* q = p; (无警告)
经验:如果把一个类型限定并不严格的变量,赋给一个类型限定非常严格的变量,编译器不会报错;如果把一个类型限定非常严格的变量,赋给一个类型限定并不严格的变量,编译器会报错
const修饰函数
在c中,任何函数传参都一定要形成临时变量,包括指针变量
const修饰函数参数:该参数不可被修改,只读
const修饰函数返回值:const int* test()告诉编译器,告诉函数调用者不要试图通过指针修改函数返回值所指向的内容
|