static作用:“改变生命周期” 或者 “改变作用域”

  程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。

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语言中Static和Const关键字的的作用相关推荐

  1. c语言中{的作用,C语言中Static和Const关键字的作用

    C语言中Static和Const关键字的作用 程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于(堆)中.那么关于C语言中Static和Const关键字的作用,你了解多少 ...

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

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

  3. C语言中static关键字和break/continue在for/while循环中的作用

    前言 此篇博客对C语言的基础知识稍加总结,包括C语言中的static关键字作用,三大循环语句中出现的break和continue对循环体的影响,常量,生命周期,作用域,字符串,转义字符等等,其中常见的 ...

  4. C语言中static关键字的作用

    在C语言中static的作用如下 第一.在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放.  第二.static修饰全局变量的时候, ...

  5. 【✊基础不牢,地动山摇のC语言中static关键字✊】

    C语言中static关键字 用static声明限定外部变量与函数,可以将其后声明的对象的作用域限定为被编译源文件的剩余部分.要降对象指定为静态存储,可以在正常的声明之前加上关键字static作为前缀. ...

  6. c语言中的所有关键字,C语言中的32个关键字

    C语言中的32个关键字 数据类型关键字(12个) (1)     char:声明字符型变量或函数 (2)     double:声明双精度变量或函数 (3)     enum:声明美剧类型 (4)   ...

  7. c语言中 a6,C语言中的32个关键字

    C语言中的32个关键字 数据类型关键字(12个) (1)     char:声明字符型变量或函数 (2)     double:声明双精度变量或函数 (3)     enum:声明美剧类型 (4)   ...

  8. c语言4钟存储类型关键字用法,求C语言中的32个关键字及其意思? C语言中32个关键字的意思和用法~!...

    C语言中的32个关键字及其意思如下: 1.auto    声明自动变量 2.short    声明短整型变量或函数 3.int    声明整型变量或函数 4.long    声明长整型变量或函数 5. ...

  9. C语言中static的作用及C语言中使用静态函数有何好处

    转自:http://www.jb51.net/article/74830.htm 在C语言中,static的作用有三条:一是隐藏功能,二是保持持久性功能,三是默认初始化为0. 在C语言中,static ...

最新文章

  1. zencoding实践
  2. Swift5之网易云音乐页面搭建
  3. enum 定义3个属性_和平精英:合金龙骨有3个隐藏属性,比玛莎“水下无敌”还唬人...
  4. leetcode106. 从中序与后序遍历序列构造二叉树(dfs)
  5. binlog日志_mysql的binlog日志的自动定时清理
  6. Spring MVC 使用优化建议
  7. C#基础List与ArrayList
  8. matlab 平滑曲线连接_基于S型曲线的连续多段曲线插补平滑过渡的规划算法(Matlab)...
  9. 钟平逻辑英语语法_逻辑英语-钟平笔记.pdf
  10. java较全的面试题
  11. java中:统计字符串大串中小串出现的次数,代码实现
  12. 转:getaddrinfo函数详解
  13. 24点游戏java代码 中国开源社区_编程实现一个有GUI的24点游戏
  14. socket的阻塞模式和非阻塞模式
  15. Emacs之缩进(五十三)
  16. oracle 导出数据 utl,oracle 使用 UTL_FILE 导出表数据到txt文件
  17. 世界各国(地区)LCID信息列表
  18. 数字经济-新经济指数(2017-2022)31省数字经济测算(2013-2020)两大维度指标
  19. linux 网卡 mac 配置文件,Linux下更改网卡的MAC物理地址
  20. 尚医通 (一)项目介绍

热门文章

  1. awesome docsify learning notes
  2. medical research
  3. 关于编译GITHUB上的工程
  4. vue组件开发脚手架(vue-sfc-rollup),开发组件并发布至npm的利器
  5. Method Swizzling 为什么要先调用 class_addMethod?
  6. centos7安装face_recognition踩各种坑
  7. nginx大量TIME_WAIT的解决办法 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'...
  8. PHP结合Ueditor并修改图片上传路径
  9. UNIX 网络编程 chapter 4
  10. mybatis中自建的类型别名