前言:
今天我们对“c语言的const”大约比较关切,姐妹们都需要学习一些“c语言的const”的相关内容。那么小编也在网络上收集了一些有关“c语言的const””的相关资讯,希望你们能喜欢,看官们快快来了解一下吧!C++const 关键字小结
const 是constant的缩写,本意是不变的,不易改变的意思。
const 在C++中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。
1、C语言的const特点
const int a = 10;//不要把a看成常量
//a的本质 是变量 只是 只读变量
c语言的const修饰全局变量 默认是(外部链接的)
fun.c
//c语言的const修饰全局变量 默认是(外部链接的) //外部链接:其他源文件 可以使用 const int num = 100;//只读的全局变量 内存放在文字常量区(内存空间只读)
main.c
//对fun.c中的num进行声明(不要赋值) extern const int num; void test03() { printf("num = %d\n",num); //num = 200;//err num只读 //C语言中const 修饰变量名 说明变量名为只读(用户不能通过变量名data进行赋值) const int data = 100;//局部只读变量 内存在栈区(内存可读可写) //data = 200;//err printf("data = %d\n",data); //但是:如果知道data的地址 可以通过地址间接的修改data所对应空间的内容 int *p = (int *)&data; *p = 2000; printf("data = %d\n",data);//ok 200 }
总结:
1、const修饰全局变量num 变量名只读 内存空间在文字常量区(只读)、不能通过num的地址 修改空间内容
2、const修饰局部变量data 变量名只读 内存空间栈区(可读可写),可以通过data地址 间接的修改空间内容
2、c++中的const 深入理解
fun.cpp
//const修饰的全局变量 默认是内部链接(只在当前源文件有效 不能直接用于其他源文件) //const int num = 100; //如果必须用在其他源文件 使用只读的全局变量 必须加extern将num转换成外部链接 extern const int num = 100;
main.cpp
//声明 extern const int num; struct Person { int num; char name[32]; }; void test04() { cout<<"全局num = "<<num<<endl;//err 不识别num //1、c++中 对于基础类型 系统不会给data开辟空间 data放到符号表中 const int data = 10; //data = 100;//err 只读 cout<<"data = "<<data<<endl; //2、c++中当 对data 取地址的时候 系统就会给data开辟空间 int *p = (int *)&data; *p = 2000; cout<<"*p = "<<*p<<endl;//空间内容修改成功 2000 cout<<"data = "<<data<<endl;//data 还是10为啥? //2、当以变量的形式 初始化 const修饰的变量 系统会为其开辟空间 int b = 200; const int a= b;//系统直接为a开辟空间 而不会把a放入符号表中 p = (int *)&a; *p = 3000; cout<<"*p = "<<*p <<endl;//3000 cout<<"a = "<<a <<endl;//3000 //3、const 自定义数据类型(结构体、对象) 系统会分配空间 const Person per = {100,"lucy"}; //per.num = 1000;//err cout<<"num = "<<per.num<<", name = "<<per.name<<endl;//100 lucy Person *p1 = (Person *)&per; p1->num = 2000; cout<<"num = "<<per.num<<", name = "<<per.name<<endl;//2000 lucy }
运行结果:
c++的const总结:
1、const int data = 10;//data先放入符号表
2、如果对data取地址 系统才会给data开辟空间
3、const int a = b;//b是变量名 系统直接给a开辟空间 而不放入符号表
4、cosnt 修饰自定义数据 系统为自定义数据开辟空间
标签: #c语言的const