l 自 動 變 數 ( auto variable )
l 自 動 變 數 只 在 它 所 定 義 的 區 塊 內 有 效 。 只 要 在 變 數 所 屬 的 區 塊 結 構 內 執 行 , 該 變 數 的 資 料 是 有 效 而 正 確 的 。 當 程 式 執 行 離 開 了 該 區 塊 , 所 有 於 區 塊 內 定 義 的 自 動 變 數 就 不 存 在 了 。
l Example 1:
l main( )
{
int x=1;
inner( );
printf("%d\n",x);
}
|
l inner( )
{
int x=2;
printf("%d\n",x);
}
|
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 外 部 變 數 ( 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 |
|