打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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()看作成一个变量,即指针本身不可变。



==============================================================


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
嵌入式编程中关于const,static,extern,volatile的用法
50-100
预处理、const、static与sizeof
关于CONST的用法
C语言中的const
想要深入理解C语言,这些点,你必须知道
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服