【C++相对于C的扩展】2.C/C++中const的异同

目录

前言

 一、C语言中的const

1.const修饰的全局变量

2.const修饰的局部变量

3.const修饰的全局变量默认为外部链接属性

二、C++中的const

1.const修饰的全局变量

2.const修饰的局部变量 

3. const修饰的全局变量默认为内部链接属性

 总结


前言

  C++在const的使用上相较于C更为严谨了,下面我们将分别介绍const在C语言中和C++中的使用情况,再进行总结比较。

 一、C语言中的const

  我们知道,const是翻译过来的意思为常量,常数。这意味着const有“不变”的含义。但是,C语言中的const修饰的变量真的是无法改变的吗?其实不然,在某些情况下const修饰的变量的值是可以被我们所改变的。下面我们慢慢分析。

1.const修饰的全局变量

  在C语言中,const修饰的全局变量保存在常量区,既不能通过变量名去修改,也不能通过地址去修改。

   可以看到,当我们想通过变量名去修改值的时候,编译器给我们报错。

  当我们想通过地址去修改时,编译器在调试的时候会引发异常而终止。

2.const修饰的局部变量

  const修饰的局部变量,存在栈区,虽然不能通过const修饰的变量去修改栈区的内容,但是可以通过地址去改变。

   可以看到,当我们用指针指向const修饰的局部变量的地址时,可以通过指针将变量里的值进行修改。

3.const修饰的全局变量默认为外部链接属性

  const修饰的全局变量,如果其他文件想使用,直接extern声明外部可用即可。  

  打印结果如下:

二、C++中的const

  C++中的const我们也像C一样从三个方面分析,看看究竟有什么异同。

1.const修饰的全局变量

  在C++中,const修饰的全局变量与C语言中的情况是一样的,既不能通过变量名去修改,也不能通过地址去修改。这里就不用代码进行演示了。

2.const修饰的局部变量 

  在C语言中,const修饰的局部变量可以通过地址来改变,但是C++中的情况却不是这样子的。C++既不能通过变量名修改局部变量的值,也不能通过地址来改变const修饰的局部变量的值。   

  可以看到,虽然编译器没有报错,但是输出的值并没有改变,这是为什么呢? 在C++中,const修饰的局部变量保存在符号表中,修改不了,是一个常量。 

3. const修饰的全局变量默认为内部链接属性

  C++中const修饰的全局变量默认为内部链接属性,加上extern修饰变为外部链接属性。 

    编译结果出错:

   当我们加上extern关键字,使其变为外部链接属性时,其他文件才能正常使用。

   编译结果如下:

 总结

  C/C++中const的主要异同点如下:

  同:C和C++中const修饰的全局变量保存在常量区,不能被修改。

  不同:

(1)C中const修饰的局部变量赋值为常量时,局部变量保存在栈区,可以被指针修改;C++中const修饰的局部变量赋值为常量时,局部变量保存在符号表,不能被修改。         

(2)C中const修饰的全局变量默认为外部链接属性;C++中const修饰的全局变量默认为内部链接属性。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

边城仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值