C语言中Static和Const关键字的作用

程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于(堆)中。那么关于C语言中Static和Const关键字的作用,你了解多少呢?下面是相关的知识,欢迎阅读。

1.作用于变量:

用static声明局部变量-------局部变量指在代码块{}内部定义的变量,只在代码块内部有效(作用域),其缺省的存储方式是自动变量或说是动态 存储的,即指令执行到变量定义处时才给变量分配存储单元,跳出代码块时释放内存单元(生命期)。用static声明局部变量时,则改变变量的存储方式(生 命期),使变量成为静态的局部变量,即编译时就为变量分配内存,直到程序退出才释放存储单元。这样,使得该局部变量有记忆功能,可以记忆上次的数据,不过 由于仍是局部变量,因而只能在代码块内部使用(作用域不变)。

用static声明外部变量-------外部变量指在所有代码块{}之外定义的变量,它缺省为静态变量,编译时分配内存,程序结束时释放内 存单元。同时其作用域很广,整个文件都有效甚至别的文件也能引用它。为了限制某些外部变量的'作用域,使其只在本文件中有效,而不能被其他文件引用,可以用 static关键字对其作出声明。

总结:用static声明局部变量,使其变为静态存储方式(静态数据区),作用域不变;用static声明外部变量,其本身就是静态变量,这只会改变其连接方式,使其只在本文件内部有效,而其他文件不可连接或引用该变量。

2.作用于函数:

使用static用于函数定义时,对函数的连接方式产生影响,使得函数只在本文件内部有效,对其他文件是不可见的。这样的函数又叫作静态函数。使用静态函数的好处是,不用担心与其他文件的同名函数产生干扰,另外也是对函数本身的一种保护机制。

如果想要其他文件可以引用本地函数,则要在函数定义时使用关键字extern,表示该函数是外部函数,可供其他文件调用。另外在要引用别的文件中定义的外部函数的文件中,使用extern声明要用的外部函数即可。

const作用: “只读(readonly)”

1.定义常量

(1)const

修饰变量,以下两种定义形式在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的,readonly。

TYPE const ValueName = value;

const TYPE ValueName = value;

(2)将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义.

extend const int ValueName = value;

2.指针使用CONST

(1)指针本身是常量不可变

char * const pContent;

const (char*) pContent;

(2)指针所指向的内容是常量不可变

const char *pContent;

char const *pContent;

(3)两者都不可变

const char* const pContent;

(4)还有其中区别方法,沿着*号划一条线:如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。

3.函数中使用CONST

(1)const修饰函数参数

a.传递过来的参数在函数内不可以改变(无意义,因为Var本身就是形参)

void function(const int Var);

b.参数指针所指内容为常量不可变

void function(const char* Var);

c.参数指针本身为常量不可变(也无意义,因为char* Var也是形参)

void function(char* const Var);

d.参数为引用,为了增加效率同时防止修改。修饰引用参数时:

void function(const Class& Var); //引用参数在函数内不可以改变

void function(const TYPE& Var); //引用参数在函数内为常量不可变

这样的一个const引用传递和最普通的函数按值传递的效果是一模一样的,他禁止对引用的对象的一切修改,唯一不同的是按值传递会先建立一个类对象的副本, 然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效.另外只有引 用的const传递可以传递一个临时对象,因为临时对象都是const属性, 且是不可见的,他短时间存在一个局部域中,所以不能使用指针,只有引用的 const传递能够捕捉到这个家伙.

(2)const 修饰函数返回值

const修饰函数返回值其实用的并不是很多,它的含义和const修饰普通变量以及指针的含义基本相同。

a.

const int fun1() //这个其实无意义,因为参数返回本身就是赋值。

b.

const int * fun2() //调用时

const int *pValue = fun2(); //我们可以把fun2()看作成一个变量,即指针内容不可变。

c.

int* const fun3() //调用时

int * const pValue = fun2(); //我们可以把fun2()看作成一个变量,即指针本身不可变。

c语言中{的作用,C语言中Static和Const关键字的作用相关推荐

  1. c语言staticint的作用,c语言中static是什么意思?作用是什么

    c语言中static是什么意思?作用是什么 发布时间:2020-04-30 10:07:02 来源:亿速云 阅读:290 作者:小新 今天小编给大家分享的是c语言中static是什么意思?作用是什么, ...

  2. C语言中Static和Const关键字的的作用

    static作用:"改变生命周期" 或者 "改变作用域" 程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中. 1.作用 ...

  3. java可以使用c语言中的输入,c语言中的scanf在java中应该怎么表达,Scanner类。

    1 java是面向对象的语言 它没有像C语言中的scanf()函数,但是它的类库中有含有scanf功能的函数 2 java.util包下有Scanner类 Scanner类的功能与scanf类似 3 ...

  4. 汇编中的la_汇编语言中,SP,BP ,SI,DI作用?

    这个很简单: sp:表示栈顶指针,指向栈顶地址.与SS相配合使用.ss为栈段. bp:是基址指针,段地址默认在SS中.可以定位物理地址,比如:"mov ax,[bp+si+6]/mov ax ...

  5. 以下关于c语言中static和const,c语言中static const作用

    c语言中static const作用 (2012-06-21 07:51:08) 标签: it 关键字static: 1. 在函数体内,一个被声明为静态的变量在这一个函数被调用的过程中维持其值不变. ...

  6. ab 是什么意思C语言中,a/b在c语言中什么意思,c语言中ab是什么意思

    Q1:c语言中y=(x=a+b,b+c)代表什么意思 x=a+b表达式使得x=6,其返回值为X(x,b+c)是逗号表达式,逗号表达式的值为最后一个子表达式的值所以 y=b+c y=10 Q2:C语言中 ...

  7. break在c语言中的应用,c语言中break的用法

    C语言中break语句有以下两种用法: 1.当break语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句. 2.它可用于终止switch语句中的一个case. 如果使用 ...

  8. int n在c语言中表示什么,c语言中strec表示什么

    比较浅显的来说,左移n位就是乘以2的n次方,右移n位就是除以2的n次方.具体细节如下: C语言里的左移和右移运算 2006-09-30 13:52 先说左移,左移就是把一个数的所有位都向左移动若干位, ...

  9. C/C++ static和const关键字的作用

    static关键字至少有下列n个作用: (1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值: (2)在模块内的stat ...

最新文章

  1. WCF 框架运行时类图
  2. 前向业务中间层的意义,架构,技能要求
  3. Spring的@Scope的几种取值
  4. Spring 中的 LocalSessionFactoryBean和LocalContainerEntityManagerFactoryBean
  5. cdh集群的重启过程
  6. Vue Router 4 快速入门
  7. ci源码解析之CodeIgniter.php
  8. 【POJ 1228】Grandpa's Estate【稳定凸包】
  9. vivado仿真脚本生成
  10. 美通企业日报 | 今年中国私家车行驶里程同比大降18%;缤客发布2020年八大旅行趋势...
  11. 计算机硬件系统的运算器又称为,2016计算机专业知识:计算机硬件系统(一)...
  12. 联接(CROSS JOIN、JOIN、OUTER JOIN)
  13. h5微信f分享链接给对方获取对方手机号_企业微信可以搜索微信号添加好友/客户吗?怎样主动添加通过率高?...
  14. 百度文心一言推出内测专用独立 App;暴雪回应被网易起诉:未收到相关诉状;iOS 17或支持第三方应用商店 | 极客头条
  15. 3D打印机T3升级corexy  制作过程(一)
  16. 横河川仪压力变送器调零_横河EJA系列的变送器调零如何操作?
  17. AndroidHttpCapture---手机轻松抓包工具
  18. idea的maven中出现target文件不完整或者“class not found“ 或 “test not fount“
  19. ant-design中取消tab激活时候的下划线、以及修改tab激活时候下划线颜色
  20. oracle purge作业,Oracle purge用法介绍

热门文章

  1. 为什么Linux CFS调度器没有带来惊艳的碾压效果? | CSDN博文精选
  2. 保温杯都这么给力了,你的 Bug 就不能少点?
  3. 霸气!Power 支持混合云、多云,性能完胜 x86!
  4. 程序员,岂能被网站吞吐量难住?
  5. 苹果抛弃 OpenGL!
  6. 谷歌终于开放 “.app” 顶级域名注册:需要 HTTPS 加密
  7. 谁说 Java 要过时?2017 年 Java 大事件回顾!
  8. 限速牌的单位是什么_成熟的造车新势力应该是什么样的?
  9. 架构师必备!java三大特性用代码表现
  10. mysql php 问号_PHP / MySQL:某些字符未正确编码并显示为问号