const、static关键字

一、const
1.定义const只读变量,具有不可变性
const 修饰的只读变量必须在定义的同时初始化。
原因:在定义的时候就把它的内存空间给限制死了,要是不初始化,那块区域永远就是那个样子。(C语言规定)
case语句后面是否可以是 const修饰的只读变量呢?
case后边只能跟的是常量,不能是变量。
2.节省空间,避免不必要的内存分配,提高效率
编译器通常不为普通 const 只读变量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的值,没有了存储与读内存的操作,使得它的效率也很高。
#define M 3 //宏常量
const int N=5; //此时并未将 N 放入内存中
const 定义的只读变量从汇编的角度来看, 只是给出了对应的内存地址, 而不是像#define一样给出的是立即数。#define 定义的宏常量在内存中有若干个拷贝。它是在编译阶段的替换。const 修饰的只读变量是在编译的时候确定其值。
#define宏没有类型,const有确定的类型。
3.只读变量在定义时,修饰符 const 可以用在类型说明符前,也可以用在类型说明符后。
int const i=2; 或 const int i=2;这两种方式都可以。
int const a[5]={1, 2, 3, 4, 5};或
const int a[5]={1, 2, 3, 4, 5};数组的修饰方式。
4.定义指针变量就不相同
const int *p; // p 可变, p 指向的对象不可变
int const *p; // p 可变, p 指向的对象不可变
int *const p; // p 不可变, p 指向的对象可变
const int *const p; //指针 p 和 p 指向的对象都不可变。
总之一句话离那个近就修饰那个。
5.修饰函数
const 修饰符也可以修饰函数的参数,当不希望这个参数值被函数体内意外改变时使用 void Fun(const int i)告诉编译器i在函数体内不能改变。
6.修饰函数返回值
const 修饰符也可以修饰函数的返回值,返回值不可被改变。
const int Fun (void);
在另一连接文件中引用 const 只读变量:
extern const int i; //正确的声明
extern const int j=10; //错误!只读变量的值不能改变。
二、static
static在C语言里有两个作用,修饰变量和修饰函数。
1.修饰变量
静态全局变量:作用域仅限于变量被定义的文件中,其他文件即使用 extern 声明也没法使用他。也就是说从定义开始到文件结束。
静态局部变量:在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他函数也用不了。由于被 static 修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。
2.修饰函数
函数前加 static 使得函数成为静态函数。但此处“static”的含义
不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值