- const主要修饰不变的常量,函数参数
- 全局 const
- 直接修改 失败 间接修改 失败
- 局部 const
- 普通变量直接修改失败 间接修改 失败 结构体、数组...可以通过间接修改
- const 链接属性
- C语言下const修饰的全局变量默认是外部链接属性
- C++下const修饰的全局变量默认是内部链接属性,可以加extern 提高作用域
示例
#include <iostream>
#include <string>
using namespace std;
const int a = 10;
//不能通过指针修改const的值
void test01() {
const int a = 10;
int* p = (int *)&a;
*p = 20;
cout << a << endl;
}
struct Person {
int id;
string name;
int age;
};
//结构体内数据可以通过指针间接修改
//不能修改改结构体变量首地址
void test02() {
const Person p1 = { 1,"Andy",21 };
const Person p2 = { 2,"Tom",21};
Person* p = (Person *)&p1;
p->id = p2.id;
p->name = p2.name;
p->age = p2.age;
cout <<"id:" << p1.id <<" name:"<< p1.name<<" age:"<< p1.age << endl;
//p1 = p2;
}
void test03() {
//加extern 提高作用域
//连接到外部文件中extern const int num
extern const int num;
cout << num << endl;
//全局const变量不通过指针间接修改
//int* p = (int *)&a;
//*p = 90;
//cout << *p << endl;
}
int main()
{
test01();
test02();
test03();
system("pause");
return EXIT_SUCCESS;
}