广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c语言和c++语言中const修饰的变量区别浅析
  • 740
分享到

c语言和c++语言中const修饰的变量区别浅析

2024-04-02 19:04:59 740人浏览 八月长安
摘要

目录c:修饰全局变量:修饰局部变量:c++:修饰全局变量:修饰局部变量:总结:在C语言中:在c++语言中:总结c: 修饰全局变量: 用const修饰的全局变量是没有办法直接修改的,间

c:

修饰全局变量:

用const修饰的全局变量是没有办法直接修改的,间接的修改也是不成功的(语法可以通过,但是编译运行的时候会报错。)(const只要是修饰全局变量,那么就会储存到常量区中,收到常量区的保护。)

修饰局部变量:

但是如果用const修饰局部变量,同样的也是没有办法直接修改的,但是是可以间接修改的。

int main()
{
    const int b = 10;
    int* p = &b;
    *p = 20;
    pirntf("%d",b);
    return 0;
}

这样就不会报错。(const修饰的局部变量是储存到栈上,相当于分配到内存上,可以修改成功)。

通常叫这种变量为伪常量,不能用这种常量不能构成数组。arr[伪常量]这种写法是错误的。

c++:

修饰全局变量:

const修饰全局变量的效果是和c语言的一样的。无论是直接修改还是间接修改都是报错的。

修饰局部变量:

const修改局部变量,直接修改是不成功的,不会报错,但是输出的结果是修改前的值,相当于没有修改。因为在c++中,const修饰的无论是局部变量还是全局变量都是常量了。数组的初始化可以使用这个const修饰的变量了。

int main
{
    const int a = 100;
    int* p  = (int *)&a;
    *p  = 200;
    cout<<a<<endl;//100
    return 0
}

输出的结果依然是100,注意给p指针赋值的时候需要将&a进行强制类型转换(c++的要求,因为这个时候&a的类型是const int*)

剖析这个代码:

int *p = (int *)&a

实际上是int temp = a 先在栈上创建了一个和a的值一样的变量temp,

当对const修饰的局部变量取地址的时候,编译器会给变量分配临时的内存空间,这个内存空间就是temp的内存空间。而给p赋值的时候就是将这个临时变量的空间的地址赋值给了p。

也就是int*p = &temp然后p指针指向的也就是temp,所以说后来的*p = 200改的就是temp而不是a的值。临时空间没有什么意义。

(const int a =100写出来了以后就一直放在符号表中(键值对一一对应着不会改变。))

总结:

在c++语言中,一个const修饰的变量不是必须创建内存空间的,c语言中,总是需要一块内存空间。

在c语言中:

对于全局变量:

将const修饰的全局变量存储在只读数据段,保存在符号表中,第一次使用的时候再分配内存,程序结束的时候释放。(这个是不能修改的,因为存储在只读数据段中)

对于局部变量:

将const修饰的局部变量存储在栈中,代码块结束的时候释放。(这个是可以修改的,在栈上)

在c++语言中:

对于全局变量:

是否为const变量分配内存空间取决于const变量的用途。如果是作为一个值(用这个值去替换一个函数名),就不分配空间。如果是对这个全局变量取地址,那么会分配内存,存储在只读数据段。两种都是不能进行修改的。

对于局部变量:

如果是const int a = 100;直接放进符号表中,不分配内存。如果对其取地址的话,在栈上分配内存空间temp,修改不成功,因为修改的只是temp的值,对在符号表中的a没有影响。

如果是const int a = b;分配内存。

如果是自定义的类型,比如类对象,分配内存。

总结

到此这篇关于c语言和c++语言中const修饰变量区别的文章就介绍到这了,更多相关c语言和c++中const修饰的变量内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: c语言和c++语言中const修饰的变量区别浅析

本文链接: https://www.lsjlt.com/news/139643.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c语言和c++语言中const修饰的变量区别浅析
    目录c:修饰全局变量:修饰局部变量:c++:修饰全局变量:修饰局部变量:总结:在c语言中:在c++语言中:总结c: 修饰全局变量: 用const修饰的全局变量是没有办法直接修改的,间...
    99+
    2022-11-13
  • 关于C语言 const 和 define 区别
    目录一.const使用1.const修饰变量2.const修饰指针3.const修饰在函数名前面当4.const修饰在函数名后面5.const修饰函数参数二.define使用1.de...
    99+
    2022-11-12
  • 浅析C语言初阶的常量和变量
    目录什么是常量和变量常量示例定义变量的方法变量的分类示例变量的使用变量的作用域和生命周期作用域生命周期结语什么是常量和变量 在C程序执行过程中,其值不发生改变的量称为常量,其值可变的...
    99+
    2023-05-19
    C++常量和变量 C++常量 C++变量
  • 浅谈C语言的变量和常量
    目录变量的分类1.全局变量2.局部变量(补充:只要放在{ }里的都是局部变量)变量的作用域和生命周期作用域生命周期常量总结生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型...
    99+
    2022-11-13
  • C语言中const和define的区别是什么
    本文小编为大家详细介绍“C语言中const和define的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言中const和define的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。def...
    99+
    2023-06-29
  • C语言中const和define的区别你了解嘛
    目录define和const使用const和define区别总结define和const使用 const和define区别 #include <stdio.h> #...
    99+
    2022-11-13
  • C语言中的const如何保证变量不被修改
    这小段文章要理清楚的是,在C语言中,const是如何保证变量不被修改的? 我们可以想到两种方式: 第一种,由编译器来阻止修改const变量的语句,让这种程序不能通过编译; 第二种,由...
    99+
    2022-11-12
  • 深入浅析C语言与C++的区别与联系
    目录一、C语言是面向过程语言,而C++是面向对象语言1、面向过程和面向对象的区别2、面向过程和面向对象的优缺点面向过程语言面向对象语言二、具体语言上的区别1、关键字的不同2、后缀名不...
    99+
    2022-11-12
  • C语言中auto,register,static,const,volatile的区别详细解析
    1)auto这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变...
    99+
    2022-11-15
    register static const volatile
  • 浅谈C语言中的sizeof()和strlen()的区别
    目录sizeof()strlen补一个注意事项:sizeof()和strlen()经常会被初学者混淆,但其中有有很大区别: sizeof() 1. sizeof()【操作数所占空间的...
    99+
    2022-11-13
  • c语言静态变量和全局变量有什么区别
    C语言中的静态变量和全局变量在作用域和生命周期上有所区别。1. 作用域:- 全局变量:全局变量定义在函数外部,可以被程序中的所有函数...
    99+
    2023-09-14
    c语言
  • C语言中const保证变量不被修改的方法有哪些
    小编给大家分享一下C语言中const保证变量不被修改的方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在C语言中,const是如何保证变量不被修改的?我们...
    99+
    2023-06-14
  • C语言中i++和++i的区别
    本篇内容主要讲解“C语言中i++和++i的区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言中i++和++i的区别”吧!i++ :先引用后增加++i :先...
    99+
    2022-10-19
  • 汇编语言和c语言的区别是什么
    区别:1、因为汇编语言实质上是机器语言的助记符,是直接面对CPU的语言,所以汇编语言的运行效率比C语言高;2、汇编语言对硬件的可操控性强,C语言硬件可操控性比较差;3、汇编语言的目标代码体积小,C语言目标代码体积大;4、汇编语言不易维护,C...
    99+
    2023-05-14
    汇编语言 C语言
  • 汇编语言和c语言的区别有哪些
    本文小编为大家详细介绍“汇编语言和c语言的区别有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“汇编语言和c语言的区别有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。区别:1、因为汇编语言实质上是机器语言...
    99+
    2023-07-04
  • 浅析C语言中assert的用法
    assert是C语言中的一个宏,用于在程序中检查特定的条件是否为真。当assert条件为假时,程序会中止执行,并打印出错误消息。as...
    99+
    2023-08-11
    C语言
  • C语言由浅入深了解变量的应用
    目录1. 变量的存储类别内存虚拟内存分区(运行程序时进行分区) 2. 全局变量普通的全局变量静态全局变量3. 局部变量普通局部变量静态局部变量4. const不可赋值变量5...
    99+
    2022-11-13
  • C语言scanf,fscanf和sscanf的区别
    目录一.scanf,fscanf和sscanf1.scanf2.fscanf3.sscanf二.printf,fprintf和sprintf1.printf2.fprintf3.sp...
    99+
    2022-11-12
  • C语言中.c和.h文件区别讲解
    C语言中.h和.c文件解析     简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: ...
    99+
    2022-11-12
  • C语言中指针常量和常量指针的区别
    在面试中我们经常会被面试官问到什么是常量指针,什么又是指针常量。 指针常量就是指针本身是常量,指针里面所存储的内容(内存地址)是常量,不能改变。但是,对应内存地址里存的内容是可以通过...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作