当前位置:网站首页>存储类别
存储类别
2022-07-29 05:08:00 【Ryan菲特】
存储类别
1.作用域
作用域描述程序中可访问标识符的区域。其主要有:块作用区域、函数作用域、函数原型作用域、文件作用域。
2.链接
C变量有3种链接属性:外部链接、内部链接、无链接。其中块作用域、函数作用域、函数原型作用域的变量都是无链接变量。
3.存储期
作用域和链接描述了标识符的可见性。存储期描述了通过这些标识符访问的对象的生存期。C有4种存储期:静态存储期、线程存储期、自动存储期、动态分配存储期。
4.5种存储类别
| 存储类别 | 存储期 | 作用域 | 链接 | 声明方式 |
|---|---|---|---|---|
| 自动 | 自动 | 块 | 无 | 块内 |
| 寄存器 | 自动 | 块 | 无 | 块内,使用关键字register |
| 静态外部链接 | 静态 | 文件 | 外部 | 所有函数外 |
| 静态内部链接 | 静态 | 文件 | 内部 | 所有函数外,使用关键字static |
| 静态无链接 | 静态 | 块 | 无 | 块内,使用关键字static |
//块中的变量
#include <stdio.h>
int main(void)
{
int x = 30;//原始的x
printf("x in outer block :%d at %p\n", x, &x);
{
int x = 77;
printf("x in inner block:%d at %p\n", x, &x);
}
printf("x in outer block :%d at %p\n", x, &x);
while (x++ < 33)//原始x
{
int x = 100;//新的x,隐藏了原始的x
x++;
printf("x in while loop:%d at %p\n", x, &x);
}
printf("x in outer block :%d at %p\n", x, &x);
return 0;
}
程序输出:
x in outer block :30 at 000000000061fe08
x in inner block:77 at 000000000061fe0c
x in outer block :30 at 000000000061fe08
x in while loop:101 at 000000000061fe0c
x in while loop:101 at 000000000061fe0c
x in while loop:101 at 000000000061fe0c
x in outer block :34 at 000000000061fe08
以上程序表现了在不同块中的变量的作用以 “{}” 作为分界。
5.存储类别说明符
| 关键字 | 说明 |
|---|---|
| typedef | 与任何内存都无关,在绝大多数情况下,不能在声明中使用多个存储类别说明符,所以不能使用多个存储类别说明符作为typedef的一部分。 |
| auto | 表明变量是自动存储期,只能用于块作用域的变量声明中。 |
| register | 只用于块作用域的变量,把变量归为寄存器存储类别,请求最快速度访问该变量,同时也保护了变量的地址不被获取。 |
| static | 说明创建的对象具有静态存储期,载入程序时创建对象,当程序结束时对象消失。块作用域的静态变量无链接;文件作用域的静态变量具有内部链接。 |
| extern | 表明声明的变量定义在别处。若包含extern的声明具有文件作用域,则引用的变量必须具有外部链接。若包含extern的声明具有块作用域,则引用的变量可能具有外部链接或内部链接,取决于变量的定义式声明。 |
边栏推荐
- 什么是_GLIBCXX_VISIBILITY(default)
- C how to realize simple factory mode
- AI应用第一课:C语言支付宝刷脸登录
- 串口通讯部分详解
- In depth analysis of common cross end technology stacks of app
- 数千个数据库、遍布全国的物理机,京东物流全量上云实录 | 卓越技术团队访谈录
- C language handwritten qq-ai version
- osg3.6.5编译freetype失败
- 365天挑战LeetCode1000题——Day 038 公交站间的距离 + 基于时间的键值存储 + 转变数组后最接近目标值的数组和 + 有界数组中指定下标处的最大值
- Button for QT custom switch effect
猜你喜欢
随机推荐
CSDN的md编辑器如何输入上下标?公式和非公式的输入方式不一样
AI应用第一课:C语言支付宝刷脸登录
QT学习:使用JSON/XML等非ts文件实现多语言国际化
英伟达周锡健:设计到数字营销的最后一公里
7.3-function-templates
365天挑战LeetCode1000题——Day 041 二分查找完结纪念 + 第 N 个神奇数字 + 在线选举
CMU15-213 Shell Lab实验记录
C how to realize simple factory mode
最新坦克大战2022-全程开发笔记-2
小鲁客栈---预告篇
With frequent data leakage and deletion events, how should enterprises build a security defense line?
CMake 设置vs启动运行环境路径
OCCT学习002-----环境搭建
Getting started with solidity
APP常用跨端技术栈深入分析
Ros1 dead chicken data is stored in txt and SQLite
OCCT学习003-----MFC单文档工程
In depth analysis of common cross end technology stacks of app
来!看排名一年上升16位的ClickHouse,如何在京东落地实践
QML custom tabbar









