变量----既能读又能写的内存对象,称为变量;
一旦初始化不能被修改的对象,称为常量。
常量只能初始化不能被赋值,所以类中的const成员变量只能通过初始化列表初始化。
注意:const修改的变量也叫常量;
全局区的const修饰的变量(或者说是全局区的常量),两种修改值的方式都不适用;
栈区的const修改的变量(或者说是栈区的常量),可以通过地址修改,所以也叫伪常量。
变量的本质:
一段连续内存空间的别名;
程序通过变量来申请和命名内存空间;
通过变量名访问内存空间;
不是向变量名读写数据,而是向变量名所代表的内存空间读写数据。
修改变量的两种方式:
直接修改
通过地址修改;
const使用场景
struct Student
{
int age;
};
void test(struct Student*xj)//目标:读取结构体中的数据
{
xj->age =30;//可能不小心改了数据,为解决这个问题 把形参改为 const struct* xxj就可以了
}
int main()
{
struct Student stu1 = {18};
test(&stu1);
printf("%d",stu1.age);//30
return 0;
}
修改后如下:
struct Student
{
int age;
};
void test(const struct Student*xj)//目标:读取结构体中的数据
{
//xj->age =30;该代码编译器报错 不能编译 这样就保证了不会被误修改
}
int main()
{
struct Student stu1 = {18};
test(&stu1);
printf("%d",stu1.age);//18
return 0;
}
这是设计接口时候应该注意的,如果只是提供给别人读传入的数据的功能,加上const。