c与c++中const使用

c中可以修改const修饰的变量的值

//局部变量  
int main(){    
const int c = 10;//只读
	int *p = (int*)&c;
	printf("c===>%d\n", c);//输出为10
	*p = 11;//a的值可以被修改
	printf("c===>%d\n", c);//输出为11
    printf("p===>%d\n", *p);//输出为11

}



//全局变量
const int c = 10;//只读  
int main(){    
	int *p = (int*)&c;
	printf("c===>%d\n", c);//输出为10
	*p = 11;//a的值可以被修改
	printf("c===>%d\n", c);//输出为11
    printf("p===>%d\n", *p);//输出为11

}

 

 

c++中不可以修改const修饰的变量的值

//局部变量
int main(){
const int c = 10;
    	int *p = (int*)&c;
    	printf("c===>%d\n", c);//输出为10
    	*p = 11;//a的值不可以被修改
    	printf("c===>%d\n", c);//输出为10
        printf("p===>%d\n", *p);//输出为11
}
为什么*p输出的是11?
原因: 局部变量 const int c其实是保存在符号表中,无内存地址,但自己对c进行&c,那么编译器会为c分配一个地址,
但取c的值依然是从符号表中取值,而用指针int *p=&c;*p=11;这个值是改变c的内存所表示值,不会改变符号表中c的值



//全局变量
const int c = 10;
int main(){
    	int *p = (int*)&c;
    	printf("c===>%d\n", c);//输出为10
    	*p = 11;//段错误  Segmentation fault
    	printf("c===>%d\n", c);//
}
为什么会段错误?
c++中全局const变量是不分配内存地址的,它编译器放置在符号表中作为编译期常量,全局const变量放在只读数据段中,
受到只读数据段的权限保护,当你修改一个只读数据段中的内容时,会得到一个运行时错误。

 

 

 

C语言中的const变量
C语言中const变量是只读变量,有自己的存储空间

C++中的const常量
可能分配存储空间,也可能不分配存储空间
当const常量为全局,并且需要在其它文件中使用,会分配存储空间
当使用&操作符,取const常量的地址时,会分配存储空间
当const int &a = 10; const修饰引用时,也会分配存储空间

 

int  main(void) 
{ 
    //const  定义常量-­‐-­‐-­‐>  const  意味只读 
    const  int  a; 
    int  const  b; 
    //第一个第二个意思一样  代表一个常整形数 
    const  int  *c; 
    //第三个  c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改) 
    int  *  const  d; 
    //第四个  d  常指针(指针变量不能被修改,但是它所指向内存空间可以被修改) 
    const  int  *  const  e  ; 
    //第五个  e⼀一个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改) 
    return  0; 
}

 

 

https://mp.csdn.net/postedit/81749964

借鉴:https://blog.csdn.net/h1418792278/article/details/78009957

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值