static与const的区别

(一)static主要有三个作用:

1.修饰局部变量,成为静态局部变量

2.修饰全局变量,成为静态全局变量

3.修饰函数,成为静态函数

(1)修饰局部变量。成为静态局部变量

没有加static的情况

如果加了static会有什么变化呢?

栈区:存放局部变量和函数参数等的地方。栈区的作用范围过了之后会自动回收栈区分配的内存,不需要手动管理。

静态区:静态变量和全局变量所存储的区域,一旦静态区的内存被分配,直到程序全部结束之后才会被释放。

静态区这个换而言之:静态区的生命周期和程序的生命周期是一样的,出了作用范围不会被销毁(上面static int a =5)这个例子,相当于作用范围不变,但生命周期延长了。

那么上面那个例子我们也可以进行解释原理了:

static修饰局部变量时,实际改变的是变量的存储位置,原来在栈区,被修饰后放在了静态区。

所以说除了作用范围之后不会被销毁。

(2)static修饰全局变量

紧接着,我们知道引用别的文件里的全局变量需要extern这个函数,所以我们再test2.cpp这个文件里引用一下这个全局变量。

所以我们编译结果为:

但是如果我们再test1.cpp里面的全局变量前面加上static,我们可以看一下程序能否成功运行。

程序出错了.

我们看错误原因:无法解析的外部符号。

这是为什么啊,我们明明已经用了extern这个函数来调用外部文件里的那个全局变量了啊,为什么无法解析呢?

那肯定是static捣的鬼嘛,它在这里发挥了什么作用呢?

一个全局变量本来是具有外部属性的,但是被static修饰后,外部属性就变成了内部连接属性,只能在自己所在的源文件内使用,不能在其他文件内使用。

这样呢,被static修饰后的全局变量给我们的感觉是作用域变小了(只能在自己文件内部使用,不能在别的文件内使用),但实质是链接属性变了。

3.static修饰函数

完美的输出了我们想要的结果。

但如果我们在test2.c里面的Add函数里面加上static:

发生错误。

错误原因也是无法解析的外部符号。

错误呢,和上个修饰全局变量一样:

一个函数本来是具有外部连接属性的,但是被static修饰后,外部链接属性就变成了内部连接属性,只能在自己所在的源文件内部使用,不能在其他文件内部使用了。

(二)const的作用

如果把const放在变量类型名前,说明这个变量的值是保持不变的,该变量必须在定义时初始化,初始化后对它进行的任何赋值都是非法的。

1.const修饰常变量

例如:

int a=5;

a=6;

此时a的值被修改为6。

const int a=5;

此时变量a的值便可再被修改

若仍写a=6,则程序便会出现错误。

2.const修饰常量静态字符串

例如:

const char str[]="fdsafdsa";

如果没有const的修饰,我们可能会在后面有意无意的写str[4]=’x’这样的语句,就可以更改。有了const,这个错误就能在程序被编译的时候就立即检查出来,这就是const的好处。让逻辑错误在编译期被发现。

冀然的编程学习
关注 关注
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
c语言总结:static关键字的用法与const*与*const区别
碧瑶的博客呀
07-11 294
c语言中,static是用来修饰变量与函数的,主要分为: 修饰局部变量 static修饰的局部变量只执行一次,延长了局部变量的生命周期,让静态局部变量出了作用域依然存在,直到程序运行结束后才被释放。 例如:代码1 void test() { int i = 0; i++; printf("%d ", i); } int main() { for (int i = 0; i < ...
理解PHP5中staticconst关键字的区别
12-17
在PHP5中,面向对象编程得到了显著增强,引入了`static`和`const`这两个关键字,它们分别用于处理静态成员变量和常量。下面将详细解释这两个关键字的作用和使用场景。 1. `static`关键字 `static`关键字用于声明类...
StaticConst区别
G_Q_L的博客
09-11 772
StaticConst区别static static局部变量 将一个变量声明为函数的局部变量,那么这个局部变量在函数执行完成之后不会被释放,而是继续保留在内存中 static 全局变量 表示一个变量在当前文件的全局内可访问 static 函数 表示一个函数只能在当前文件中被访问 static 类成员变量 表示这个成员为全类所共有 static 类成员函数 表示这个函数为全类所共有,而且只能访问静
C/C++中staticconst区别
u011040361的专栏
05-16 1096
static 用途 1 static局部变量 表示该变量不是auto型的,就是说,该变量在程序开始的时候创建,在程序结束的时候存储空间不释放,使用的时候沿用上一次的那个值 2 static 全局变量 表示该变量只能在本文件中使用,不能被其他文件使用 3 static 函数 表示该函数只能在本文件中使用 不能被其他文件中的函数调用 4 static 类成员变量 表示这个类被全类拥有 该类的所有
c/c++中conststatic区别
ronzhou18的专栏
04-07 420
const就是只读的意思,只在声明中使用; static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放; 对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见;对于static函数也是在当前模块内函数可见. static const 应该就是上面两者的合集. 下面分别说明: 全局: cons
解析php中static,const与define的使用区别
10-27
PHP中staticconst和define这三种不同的概念均与常量的定义和使用相关,但它们在使用场景和工作方式上有着本质的区别。以下是对这三者的详细解析。 首先是define,它是预处理指令,用于定义宏常量。在PHP中,使用...
php中staticconst关键字用法分析
10-20
在设计面向对象的程序时,合理使用staticconst可以帮助我们更好地管理资源和常量。静态成员适用于那些不需要与类的任何特定实例关联的场景,如缓存数据、计数器等;而常量适用于定义那些在程序中不会改变的值,如...
C++类中的staticconst用法实例教程
01-20
staticconst是C++程序设计中非常重要的概念,本文实例列举了C++类中的staticconst的规则和用法。供大家参考借鉴。具体说明如下: 首先以代码用来举例说明。示例代码如下: class A { public: A():m(10) //...
conststatic区别
热门推荐
量变产生质变
06-25 1万+
对于C/C++来说,就是只读的意思,只在声明中使用,意即其所修饰的对象为常量((immutable)),它不能被修改,并存放在常量区。一般有两个作用,规定作用域和存储方式(静态存储)。对于局部变量,static规定其为静态存储方式每次调用的初始值为上一次调用后的值,调用结束后存储空间不释放;对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见,对于static函数也是如此。static修饰的变量如果没有初始化,则默认为0.
conststatic区别
最新发布
qq_54413454的博客
06-15 1326
对于函数,static可以限制函数的可见性,使其成为静态函数,只能在定义它的文件中使用。此外,static还可以用于修饰类的成员函数或成员变量,以实现一些特定的功能,如单例模式或共享数据。1.在类中,被static修饰的函数是类的静态成员函数,静态成员函数也属于类,而不属于某一个特定对象,被所有对象共享。常对象的值在创建后不能被修改,它的成员变量和成员函数都被视为常量,并且只能调用常函数。常函数承诺不会修改对象的任何成员变量,它只能读取成员变量的值,但不能修改它们。在C++中,常量是一个固定的值,它在。
staticconst区别
weixin_40820881的博客
10-30 265
static 1.static局部变量 将一个变量声明为函数的局部变量,那么这个局部变量在函数执行完成之后不会被释放,而是继续保留在内存中 2.static 全局变量 表示一个变量在当前文件的全局内可访问 3.static 函数 表示一个函数只能在当前文件中被访问 4.static 类成员变量 表示这个成员为全类所共有 5.static 类成员函数 表示这个函数为全类所共有,而且只能访问静态成员变...
conststatic区别
weixin_62675330的博客
04-11 1499
conststatic区别 const const修饰的变量不能被更改,但是const修饰又有三种特殊的修饰方法。 const修饰指针——常量指针 const修饰常量——指针常量 const既修饰指针,又修饰常量 const修饰指针 const int *p = &a;(p为常量指针) 在被const修饰后,p为常量指针。 常量指证:指针的指向(即指向的地址)可以修改,但是指向的 数值不能修改。 const修饰常量 int *const p = &a;(p为指针常量) 指针常
staticconst区别与联系
einstein10147的专栏
03-16 1113
static 是c++中非常常用的修饰符,他被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全方面分析static 修饰符的实质。  static 的两大作用: 一、控制存储方式:   static被引入以告知编译器,将变量存储在程式的静态存储区而非栈上空间。   1、引出原因:函数内部定义的变量,在程式执行到他的定义处时,编译器为他
staticconst区别
yunfan
07-28 602
static static修饰局部变量:将一个变量声明为函数的静态局部变量,那么这个局部变量在函数执行完成之后不会被释放,而是继续保留在静态内存区中。 static修饰全局变量:表示一个变量在当前源文件的全局范围内可访问。 static修饰函数:表示一个函数只能在当前源文件中被访问。 static修饰类成员变量:表示这个成员变量为类的所有对象所共有。 static修饰类成员函数:表示这个成员函数为类的所有对象所共有,而且只能访问类的静态成员变量。 const const 常量:定义时就.
staticconst区别
xiaofeilongyu的博客
05-10 639
static static局部变量将一个变量声明为函数的局部变量,那么这个局部变量在函数执行完不会释放,而是继续保留在内存中; static全局变量表示一个变量在当前文件的全局可以访问; static函数表示一个函数只能在当前文件中被访问; static类成员变量表示这个成员为全类所共有; static类成员函数表示这个函数为全类所有,且只能访问成员变量。 const const常量 ...
C语言staticconst区别
liuasdfgqwer的博客
07-18 1160
C语言staticconst区别
C++中staticconst区别
05-20
在C++中,staticconst都是关键字,它们用于不同的目的。 1. static关键字 static关键字用于表示变量或函数在程序运行期间只有一个实例,即该变量或函数被所有对象实例共享。 对于静态变量,它们只在程序启动时初始化一次,并保存在静态数据区中,而不是存储在堆栈中,因此可以被多个对象所共享。 对于静态函数,它们只能访问静态变量或函数,因为它们没有this指针。 2. const关键字 const关键字用于表示变量或函数是只读的,即一旦被初始化后就不能再被修改。 对于常量,它们必须在定义时被初始化,且初始化后不能再被修改。 对于常量指针,它们指向的地址不能被修改,但是可以修改指针指向的值。 对于常量引用,它们只能引用常量值,不能引用非常量值。 总之,staticconst都是C++中非常重要的关键字,它们有不同的含义和用途,需要根据具体情况灵活使用。
写文章

热门文章

  • 逗号表达式 3677
  • C语言中数组长度的计算方法总结 (sizeof与strlen) 3677
  • strlen (str)类函数 1577
  • 关于字符串比较不能用“==”,用什么? 1436
  • static与const的区别 1289

最新评论

  • 逗号表达式

    Cypress961: 你好,例题一的答案应该是12吧,=的优先级更高,应该直接赋值了

  • 关于“ %d ”与“ %u ”一点小问题

    CSDN-Ada助手: 恭喜您写了第16篇博客!标题看起来很有趣,我很期待阅读您的观点和见解。持续创作是非常了不起的,您在探索和分享技术问题方面的努力是值得称赞的。在下一步的创作中,我建议您可以考虑拓展一下标题中提到的“%d”和“%u”的相关问题。或许您可以深入探讨它们在编程中的具体应用,以及它们可能导致的问题和解决方案。再次恭喜您,并期待您未来更多的精彩博文!

  • 关于数组指针与指针数组

    CSDN-Ada助手: 恭喜您写了第18篇博客!标题“关于数组指针与指针数组”听起来很有深度。看到您一直持续创作,真是令人佩服。在这篇博客中,您探讨了数组指针和指针数组的关系,这是一个非常有价值的主题。我希望能看到您在接下来的博客中更深入地探讨这个主题,或者挑战一些更复杂的编程问题,以便我们能够进一步学习和理解。谢谢您的分享,并期待您未来的创作!

  • strlen (str)类函数

    CSDN-Ada助手: 恭喜您撰写了第19篇博客!标题中提到的strlen、strcpy、strcat和strcmp函数是C语言中非常常用的字符串处理函数,对于初学者来说,深入理解它们的用法和特点是非常重要的。您的博客内容相信能给读者带来很多帮助和启发。 在下一步的创作中,我建议您可以进一步探讨这些函数的底层实现原理,比如strlen函数是如何计算字符串长度的,strcpy和strcat函数是如何实现字符串的复制和拼接的。这样的深入探究不仅能够加深您自己对这些函数的理解,也能够为读者提供更多有价值的知识。 希望您能继续保持创作的热情,我期待着您未来更多精彩的文章!谢谢您的分享!

  • C语言-qsort函数详解

    CSDN-Ada助手: 恭喜您撰写了第20篇博客!标题为“C语言-qsort函数详解”,这篇博客内容看起来非常有深度和价值。您对qsort函数的详细解析让读者能够更好地理解和应用它,我从中受益匪浅。 继续保持创作的势头,您已经证明了自己在编程领域的专业知识和能力。下一步,我希望您能够进一步探索其他与C语言相关的主题,比如内存管理、指针操作等等。这些主题对于想要深入了解C语言的读者来说将是非常有帮助的。 谦虚地说,我期待着您未来更多的精彩博客,并期望从中继续学习到更多有价值的知识。加油!

大家在看

  • Java基于Springboot的口腔医院卫生牙齿保护管理平台 743
  • RMC语句格式 311
  • C++入门——类和对象(上) 567
  • 图文深入理解Oracle DB实例管理 998
  • (开题)flask框架大学生创新成果信息管理系统的设计与实现(程序+论文+python) 771

最新文章

  • 【数据结构入门】时间复杂度和空间复杂度
  • C语言文件操作
  • 动态内存管理
2023年30篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家全国玻璃钢雕塑厂家河西商场秋季美陈潜江玻璃钢雕塑小品哪家好北京玻璃钢雕塑躺椅东莞玻璃钢花盆批发厂家商场美陈怎样布置陕西商场节庆美陈雕塑玻璃钢动物马雕塑哪家实惠嘉兴玻璃钢陶瓷雕塑制作宜春校园玻璃钢雕塑淮北抽象玻璃钢雕塑设计玻璃钢雕塑怎么清洁东川区玻璃钢雕塑怎么样商场外墙超酷美陈重庆景观玻璃钢雕塑佛山玻璃钢雕塑多少钱温州逼真玻璃钢面包雕塑高淳元旦商场美陈芜湖卡通玻璃钢雕塑定制玻璃钢卡通警察雕塑河池玻璃钢雕塑工作室玻璃钢景观雕塑厂家地址商场美陈布置图片素材衢州步行街玻璃钢雕塑供应商昆明火烈鸟玻璃钢雕塑制作璧山玻璃钢仿铜雕塑玻璃钢蓝莓酒瓶雕塑深圳玻璃钢花盆设计山东卡通玻璃钢动物鹤雕塑辽宁园林雕塑玻璃钢香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化