变量的属性

#变量的属性
今天讲这个变量的属性,实际也就是变量的分类,但自己感觉吧,不是特别的完整,但学到的也就这些吧,欢迎大佬补充。
直奔主题!
首先先认识一下变量从定义的位置来分:
1.块变量
块变量:在语句块中定义的变量,也只能在语句块中使用。
语句块:{ }里面,像if语句啊,while,for,do啊,它们的大括号内都是属于语句块内,单独的一个大括号也属于块。
作用域:从定义到语句块结束

{
	int m = 0;  //块变量
}

2.局部变量
局部变量:在函数(包括main函数)里面语句块外面定义的变量 形参也是局部变量
作用域:从定义开始到本函数执行结束

void func(int x) { 			// x 局部变量
	double y =  3.14;       // y 局部变量
}

3.全局变量
全局变量:在全局域中 函数外定义的变量
作用域:整个程序

#incude <stdio.h>
double PI = 3.14;  //全局变量
int main() {
...
}

注意: 在不同的作用域下面可以定义同名的变量,在访问同名变量时遵循局部优先原则
局部优先原则:在搜索变量时先找块变量 ,如果没有块变量则查找局部变量 如果没有,则查找全局变量。

那么 就有问题了,当局部变量和全局变量重名时,我想访问全局变量怎么办?有三种方法,往下看:
1.在函数中提供语句块,往其中注入全局变量

{
	extern int value = globar_val;
}

最为便利,建议使用
2.使用函数访问

int getGlobarVal (){
	return value;
}

3.提供一个全局的指针

type *p = &glovar_val;

##变量的存储修饰
1.auto 自动变量
默认就是自动变量 一般都省略了

2. static 静态变量
static修饰的局部变量叫静态局部变量;
特点:
1.static修饰的局部变量存储在全局数据区(普通的局部变量存储在栈区)
2.静态局部变量不管函数有没有被调用,它的内存都一直存在,不会随着函数的结束而释放内存,也就是静态局部变量直到程序结束才释放内存,且它只会在函数第一次被调用时定义一次
static 修饰的全局变量叫静态全局变量
特点:
1.static修饰的全局变量不能被文件外的程序访问到,(普通全局变量可以)。所以它可以达到隐藏全局变量的目的
static还可以修饰函数
特点:
只能在当前文件中调用该函数,其他文件也可通过#include 文件头访问

3.register 寄存器变量
申请把变量作为寄存器变量存储
注意:
1.只是一种请求 会被拒绝
2.不能访问寄存器变量的地址
3.寄存器变量只能是4个字节

4.volatile 易变变量
特点:拒绝效率优化,每次读取volatile变量时都会去内存中重新加载一遍,以确保正确的结果
多用于多线程,中断程序中,为了防止变量发生意想不到的变化,所以每次使用都重新去读取一遍

5.const 只读变量
const 修饰的局部变量保存在栈区 可以用指针修改
const 修饰的全局变量保存在代码区 不能修改
const int num = 10; 和 10 没啥区别的
直接修改 编译报错 通过指针修改 导致 段错误 核心已转储

const 修饰指针
const char * s 它表示 *s 只读 也就是 不能修改 s地址 指向的数据
等同于 char const *s
char *const s 它表示 s 只读 不能修改s保存的地址值
const char *const s 它表示 *s 和 s 都是只读内容 都不可修改

6.extern 外部的
1.局部变量和全局变量重名时 ,往语句块中注入全局变量
2.声明变量和函数 表示它在其他文件中定义过

就这么多吧,在其他地方有把自动变量说成局部变量的,extern修饰说成全局变量的,我不是很能理解的,我觉得今天这个要更合理一些,仍有一些迷茫,大佬帮忙指点一下啊。
上一期的查找算法,可以用递归写了,下次写查找算法补上,估计就下个周
溜溜溜 闪现!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值