返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >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://lsjlt.com/news/139643.html(转载时请注明来源链接)

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

猜你喜欢
  • c语言和c++语言中const修饰的变量区别浅析
    目录c:修饰全局变量:修饰局部变量:c++:修饰全局变量:修饰局部变量:总结:在c语言中:在c++语言中:总结c: 修饰全局变量: 用const修饰的全局变量是没有办法直接修改的,间...
    99+
    2024-04-02
  • 关于C语言 const 和 define 区别
    目录一.const使用1.const修饰变量2.const修饰指针3.const修饰在函数名前面当4.const修饰在函数名后面5.const修饰函数参数二.define使用1.de...
    99+
    2024-04-02
  • 浅析C语言初阶的常量和变量
    目录什么是常量和变量常量示例定义变量的方法变量的分类示例变量的使用变量的作用域和生命周期作用域生命周期结语什么是常量和变量 在C程序执行过程中,其值不发生改变的量称为常量,其值可变的...
    99+
    2023-05-19
    C++常量和变量 C++常量 C++变量
  • C语言中const和define的区别是什么
    本文小编为大家详细介绍“C语言中const和define的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言中const和define的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。def...
    99+
    2023-06-29
  • 浅谈C语言的变量和常量
    目录变量的分类1.全局变量2.局部变量(补充:只要放在{ }里的都是局部变量)变量的作用域和生命周期作用域生命周期常量总结生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型...
    99+
    2024-04-02
  • C语言中const和define的区别你了解嘛
    目录define和const使用const和define区别总结define和const使用 const和define区别 #include <stdio.h> #...
    99+
    2024-04-02
  • c++和c语言的区别
    区别:1、c++支持类、继承、多态等oop概念,而c语言本身并不直接支持oop;2、c++相对于c语言来说,引入了更多的新特性,例如函数重载、运算符重载、模板、异常处理等;3、c++标准...
    99+
    2024-03-14
    c++ c语言 标准库
  • c语言中/和%的区别
    c 语言中 '/' 和 '%' 运算符的不同:'/' 是除法运算符,用于计算商。'%' 是求模运算符,用于计算余数。除数必须为正整数,被除数可以为正负整数。 c语言中 / 和 % 的区...
    99+
    2024-04-27
    c语言
  • c语言中\和/的区别
    c 语言中,反斜杠 '\' 用于转义特殊字符,而正斜杠 '/' 用于表示除法运算符。此外,反斜杠还可用于注释、分隔文件路径和拼接字符常量。 C 语言中 \ 和 / 的区别 直接回答:C...
    99+
    2024-04-28
    c语言
  • c语言中,=和==的区别
    c 语言中 "=" 赋值运算符用于将值分配给变量,而 "==" 相等比较运算符用于比较两个表达式的值是否相等,返回 true 表示相等,false 表示不相等。 C 语言中 "=" 和...
    99+
    2024-04-28
    c语言
  • c语言中=和==的区别
    c语言中 "=" 赋值,而 "==" 比较。 "=" 将右边的值赋给左边的变量,而 "==" 比较两个表达式的值,相等返回真,否则返回假。 C语言中 = 和 == 的区别 C语言中的赋...
    99+
    2024-05-02
    c语言
  • c语言中|和||的区别
    c语言中“|”和“||”的区别在于运算类型:“|”执行按位或运算,只有两个值都为真才为真;“||”执行逻辑或运算,只要有一个或两个值都为真就为真。 C语言中的“|”和“||”区别 C语...
    99+
    2024-05-02
    c语言
  • c语言中c和s的区别
    "c" 和 "s" 是 c 语言的格式说明符,用于数据读写。"c" 针对单个字符,格式为 %c;"s" 针对以 '\0' 结尾的字符串,格式为 %s。 C 和 S 在 C 语言中的区别...
    99+
    2024-05-12
    c语言
  • c语言中s和c的区别
    字符串常量 (s) 和字符常量 (c) 的区别在于:1. s 用双引号表示字符串,而 c 用单引号表示单个字符;2. s 存储在只读内存中,而 c 存储在可读写内存中;3. s 可以比较...
    99+
    2024-04-30
    c语言 字符串常量
  • 浅谈C语言中的sizeof()和strlen()的区别
    目录sizeof()strlen补一个注意事项:sizeof()和strlen()经常会被初学者混淆,但其中有有很大区别: sizeof() 1. sizeof()【操作数所占空间的...
    99+
    2024-04-02
  • C语言中的const如何保证变量不被修改
    这小段文章要理清楚的是,在C语言中,const是如何保证变量不被修改的? 我们可以想到两种方式: 第一种,由编译器来阻止修改const变量的语句,让这种程序不能通过编译; 第二种,由...
    99+
    2024-04-02
  • C语言中auto,register,static,const,volatile的区别详细解析
    1)auto这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变...
    99+
    2022-11-15
    register static const volatile
  • c语言中的%和/的区别
    在 c 语言中,% 为取模运算符,返回两个操作数相除的余数;/ 为除法运算符,返回两个操作数相除的结果。取模运算返回余数(int 型),而除法运算返回商(浮点型);两个操作数皆为整数时,...
    99+
    2024-04-28
    c语言
  • C语言和C++的区别:深入剖析
    c++ 和 c++ 的主要区别在于语法、特性和用途。语法:c 使用花括号 { } 定义代码块,c++ 使用更灵活的面向对象语法。特性:c++ 引入了多态性、封装和继承,而 c 不支持这些...
    99+
    2024-04-04
    c++ c语言
  • 在c语言中%和/的区别
    在 c 语言中,% 是取模运算符,返回两个整数值相除的余数;/ 是除法运算符,返回两个值之间的商,即使操作数是整数也返回浮点值。关键区别在于结果类型(% 为整型,/ 为浮点型)、操作数类...
    99+
    2024-05-02
    c语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作