一早芭、概念
/*
全局變量分兩種:
1.外部局部變量,默認(rèn)情況下 所有的全局變量都是外部全局變量
什么是外部全局變量? 可以被其他文件訪問的全局變量 我們稱之為外部全局變量
2.內(nèi)部全局變量, 只要給全局變量加上 static 關(guān)鍵字 就是內(nèi)部全局變量
什么是內(nèi)部全局變量? 只能被當(dāng)前文件 訪問的全局變量 我們稱之為全局變量
外部全局變量 有一個(gè)特點(diǎn):
可以定義同名的外部全局變量
多個(gè)同名的外部全局變量 指向同一塊存儲空間
內(nèi)部全局變量有一個(gè)特點(diǎn):
也可以定義多個(gè)的內(nèi)部全局變量
多個(gè)同名的全局變量 如果不在 同一個(gè)文件中,那么指向不同的存儲空間
為了提高數(shù)據(jù)的安全性, 不讓別人在其他文件修改我們的全局變量, C語言提供了另外一個(gè)用于修改全局變量的關(guān)鍵字, static
只要 用 static修飾的全局變量 就是內(nèi)部全局變量, 只能在單錢文件中使用
這樣就可以提高我們?nèi)肿兞康陌踩?
如果多個(gè)文件存在同名的內(nèi)部全局變量,相互不會影響
如果既有外部全局變量 也有內(nèi)部全局變量,那么會優(yōu)先訪問 內(nèi)部全局變量
extern
用于聲明一個(gè)外部全局變量
聲明只需要 在使用之前 聲明就可以了
static
用于定義一個(gè)內(nèi)部全局變量
聲明 和定義的區(qū)別:
聲明不會開辟存儲空間
定義會開辟存儲空間
*/
二需纳、代碼
#include <stdio.h>
#include "zs.h"
//static
int num; // 外部全部變量
int main()
{
num = 998;
test();
printf("main.c num = %i\n",num);
test();
return 0;
}
>>> zs.c
#include "zs.h"
/*
int num; // 由于Xcode升級之后導(dǎo)致的,在Xcode6以前是可以的
如果直接在zs.c 當(dāng)中定義 外部全局變量 num, 那么我們說過同名的外部 全局變量 指向同一塊存儲空間,
那么如果在 多個(gè)文件中 有同名的外部全局變量, 可能導(dǎo)致 A文件的數(shù)據(jù) 被 B文件 不小心修改了
降低了數(shù)據(jù)的封裝性,提高了發(fā)生錯(cuò)誤的概率
*/
// extern 關(guān)鍵字用來修飾全局變量,代表聲明一個(gè)全局變量
// 注意 : 聲明全局變量 和 聲明函數(shù)一樣,僅僅是 告訴系統(tǒng) 我們有這個(gè)全局變量,但并不會真正的開辟存儲空間
//extern int num;
static int num;
void test()
{
printf("zs.c num = %i\n",num);
num = 222;
}
image.png
image.png
image.png
image.png
image.png