C的變數儲存類別
本文閱讀次數:次c 的變數儲存類別有以下四種
- extern
- auto
- register
- static
- 常數
extern
extern 可以用在變數或函式上,用來告訴編輯器該函數或變數已在其他檔案宣告過,不用在配置記憶體。
//file.c
int a = 5;
//file2.c
#include <stdio.h>
#include "file.c"
extern int a;
int main()
{
ptintf("%d\n",a); //print 5
a = 6;
ptintf("%d\n",a); //print 6
}
auto
對於區域變數來說 auto 是預設的儲存類別
#include "stdio.h"
int main()
{
int a = 5;
auto int b =3;
printf("%d\n", a+b);
return 0;
}
a 跟 b的宣告是一樣的,auto 的生命週期是在{}裡
register
register 只能用在區域變數上,且只能定義整數或字元,主要是標記長期使用的變數,將他存入暫存器,使他可以快速存取
#include <stdio.h>
int main()
{
register int i,sum=0;
for (i=0; i < 10; i++) {
sum+=i;
}
printf("%d\n",sum );
return 0;
}
static
#include <stdio.h>
int sum()
{
static int a = 5;
auto int b = 5;
a++; b++;
return a+b;
}
int main()
{
for(int i=0; i<5; i++){
printf("%d\n", sum()); // 12 13 14 15 16
}
return 0;
}
常數
常數會儲存在 text 區域
#include <stdio.h>
char *s = "hello";
int main()
{
char *t = "hello";
if (t==s) printf("%s\n","The addres is same" );
else printf("%s\n","The addres is'n same" );
return 0;
}
總結
類型 | 生命週期 | 儲存位置 |
---|---|---|
auto variable | { } 裡 | 變數的預設儲存位置,位於 heap |
extern function | 整個程式 | 變數的預設儲存位置,位於 text |
extern variable | 整個程式 | 初始化在data,未初始化在BSS |
static function | 當前檔案 | text |
static global variable | 當前檔案 | 初始化在data,未初始化在BSS |
static local variable | { } 裡 | 初始化在data,未初始化在BSS |
register variable | { } 裡 | 執行時儲存於 CPU 暫存器裡 |
字串常數 | 當前檔案 | text |