三、储 存 类 别
来源:互联网 发布:dbc传奇数据库 编辑:程序博客网 时间:2024/04/28 18:11
储 存 类 别
l l 自 动 变 数 ( auto variable )
l l 自 动 变 数 只 在 它 所 定 义 的 区 块 内 有 效 。 只 要 在 变 数 所 属 的 区 块 结 构 内 执 行 , 该 变 数 的 资 料 是 有 效 而 正 确 的 。 当 程 式 执 行 离 开 了 该 区 块 , 所 有 于 区 块 内 定 义 的 自 动 变 数 就 不 存 在 了 。
l l Example 1:
l l main( )
{
int x=1;
inner( );
printf("%d/n",x);
}
l l inner( )
{
int x=2;
printf("%d/n",x);
}
l l 静 态 变 数 ( static variable)
静 态 变 数 与 自 动 变 数 一 样 , 是 某 特 定 函 数 内 的 区 域 性 变 数 , 但静 态 变 数 的 值 不 会 因 函 数 的执 行 结 束 而 消 失 。
静 态 变 数 的 宣 告 如 下 所 示 :
{
static int a;
static int b=12345;
static char c;
static float d=13.45;
.
.
.
}
Example 1:
main()
{
increment();
increment();
increment();
}
increment()
{
int x=0;
x=x+1;
printf("%d/n",x);
}
Result = ?????
Example 2:
main()
{
increment();
increment();
increment();
}
increment()
{
static int x=0;
x=x+1;
printf("%d/n",x);
}
Result = ?????
l l 外 部 变 数 ( extern variable)
外部 变 数 和 前 面 所 提 到 的 变 数 不 同 。 外 部 变 数 的 有 效 范 围 不 是 区 域 性 , 而 是 整 体 性 ( global ) , 外 部 变 数 定 义 在 任 何 函 数 的 外 面 , 表 示 可 以 被 其 他 函 数 所 共 用 。
Example 1:
int x=123;
main()
{
printf("%d/n",x);
}
Result = ?????
Example 2:
int x=123;
main()
{
int x=321;
printf("%d/n",x);
}
Result = ?????
Example 3:
#include < stdio.h >
#include "extern.c"
int x=123;
main()
{
printf("%d/n",x);
run1();
run2();
}
run1()
{
printf("%d/n",x);
}
extern.c 内 容 如 下 :
#include < stdio.h >
run2()
{
extern int x;
printf("%d/n",x);
}
Result = ?????
/* ======================================== */
/* 程序实例: */
/* 局部(local)和整体(Global) 变量 */
/* ======================================== */
#include <stdio.h>
int step = 10; /* 整体变量宣告 */
int count = 5; /* 整体变量宣告 */
/* ---------------------------------------- */
/* 将变量值加一 */
/* ---------------------------------------- */
void increment()
{
int step = 0; /* 局部变量 step 宣告 */
step++; /* 局部变量加一 */
count++; /* 整体变量加一 */
printf(" 副程序 %2d %2d /n",step, count);
}
/* ---------------------------------------- */
/* 主程序 */
/* ---------------------------------------- */
void main()
{
int count = 0; /* 局部变量宣告 */
count++; /* 局部变量加一 */
step++; /* 整体变量加一 */
printf(" 程序名 STEP COUNT /n");
increment(); /* 副过程调用 */
printf(" 主程序 %2d %2d /n",step, count);
}/* ======================================== */
执行结果
程序名
STEP
COUNT
副程序
1
6
主程序
11
1
- 三、储 存 类 别
- 别浪费了你的大内存,大内存使用指南
- 别浪费了你的大内存之使用指南
- CPU对内存管理三
- Java三大内存区域
- 学术研究类金融数据和资讯类金融数据三大区别
- Struts的三种用法.也就是继承的三个类时分别如何写?
- VC与VB的三大区别
- 引用和指针三大区别:
- MeeGo与Android的三大区别
- 设计模式的三大类别
- em与strong的三大区别
- 漫谈程序员(三)别被技术绑架
- 别让大学对不起高三
- 高斯分布_三种类别
- CSS系列之类别样式(三)
- 别
- 别
- 如何从 Java 存储过程将 JDBC ResultSet 作为 Ref Cursor 返回
- 一、C 语 言 的 格 式
- Eclipse CDT 难以忍受的慢
- 使用JDBC连接MySql
- 二、 基 本 资 料 型 态
- 三、储 存 类 别
- 我的电脑终于不自动重启了(至少到现在为止)
- 堆和栈的区别
- DirectShow组件原理分析及应用
- 回家喽,呵呵[By tina]
- 四、基 本 输 入 / 输 出 函 数
- 五、C语言基本数据处理
- 开始认真学习c++
- The Life of a request in Spring MVC