2019年3月9日星期六 多云
(聲明:理論知識(shí)部分來自菜鳥教程網(wǎng)站G兮帧)
今日學(xué)習(xí)內(nèi)容:
(2)C 中的變量聲明
變量聲明向編譯器保證變量以指定的類型和名稱存在香追,這樣編譯器在不需要知道變量完整細(xì)節(jié)的情況下也能繼續(xù)進(jìn)一步的編譯。變量聲明只在編譯時(shí)有它的意義斤讥,在程序連接時(shí)編譯器需要實(shí)際的變量聲明怕享。
變量的聲明有兩種情況:
1砌滞、一種是需要建立存儲(chǔ)空間的。例如:int a 在聲明的時(shí)候就已經(jīng)建立了存儲(chǔ)空間念链。
2盼忌、另一種是不需要建立存儲(chǔ)空間的,通過使用extern關(guān)鍵字聲明變量名而不定義它掂墓。 例如:extern int a 其中變量 a 可以在別的文件中定義的谦纱。
除非有extern關(guān)鍵字,否則都是變量的定義君编。
extern int i; // 聲明跨嘉,不是定義
int i; // 聲明,也是定義
補(bǔ)充:extern
extern用在定義變量/函數(shù)之前啦粹。簡(jiǎn)單解釋就是偿荷,定義的變量是全局變量,在此頭文件中定義的唠椭,在其他的頭文件中也可以訪問和使用跳纳。而static定義的變量則剛好與extern相反,意思就是贪嫂,static定義的變量只能在定義了它的頭文件中訪問和使用寺庄。
//extern變量在頭文件里聲明,在c文件里定義力崇,注意只能初始化一次
//static外部不能引用斗塘,而且可以保存值,其實(shí)是一個(gè)全局變量亮靴,但是外部不能引用
(更詳細(xì)的補(bǔ)充定義可參考: C語(yǔ)言中extern的用法 - 知之可否 - CSDN博客)
嘗試下面的實(shí)例馍盟,其中,變量在頭部就已經(jīng)被聲明茧吊,但是定義與初始化在主函數(shù)內(nèi):
實(shí)例
#include <stdio.h>
// 函數(shù)外定義變量 x 和 y
int x;
int y;
int addtwonum()
{
// 函數(shù)內(nèi)聲明變量 x 和 y 為外部變量
extern int x;
extern int y;
// 給外部變量(全局變量)x 和 y 賦值
x = 1;
y = 2;
return x+y;
}
int main()
{
int result;
// 調(diào)用函數(shù) addtwonum
result = addtwonum();
printf("result 為: %d",result);
return 0;
}
當(dāng)上面的代碼被編譯和執(zhí)行時(shí)贞岭,它會(huì)產(chǎn)生下列結(jié)果:
result 為: 3
如果需要在一個(gè)源文件中引用另外一個(gè)源文件中定義的變量,我們只需在引用的文件中將變量加上 extern 關(guān)鍵字的聲明即可搓侄。
addtwonum.c 文件代碼:
#include <stdio.h>
/*外部變量聲明*/
extern int x ;
extern int y ;
int addtwonum()
{
return x+y;
}
test.c 文件代碼:
#include <stdio.h>
/*定義兩個(gè)全局變量*/
int x=1;
int y=2;
int addtwonum();
int main(void)
{
int result;
result = addtwonum();
printf("result 為: %d\n",result);
return 0;
}
當(dāng)上面的代碼被編譯和執(zhí)行時(shí)瞄桨,它會(huì)產(chǎn)生下列結(jié)果:
$ gcc addtwonum.c test.c -o main
$ ./main
result 為: 3
附錄:(在vs2010里文件如圖所示 )
(3)C 中的左值(Lvalues)和右值(Rvalues)
C 中有兩種類型的表達(dá)式:
1、左值(lvalue):指向內(nèi)存位置的表達(dá)式被稱為左值(lvalue)表達(dá)式讶踪。左值可以出現(xiàn)在賦值號(hào)的左邊或右邊芯侥。
2、右值(rvalue):術(shù)語(yǔ)右值(rvalue)指的是存儲(chǔ)在內(nèi)存中某些地址的數(shù)值乳讥。右值是不能對(duì)其進(jìn)行賦值的表達(dá)式柱查,也就是說廓俭,右值可以出現(xiàn)在賦值號(hào)的右邊,但不能出現(xiàn)在賦值號(hào)的左邊物赶。
變量是左值白指,因此可以出現(xiàn)在賦值號(hào)的左邊。數(shù)值型的字面值是右值酵紫,因此不能被賦值告嘲,不能出現(xiàn)在賦值號(hào)的左邊。下面是一個(gè)有效的語(yǔ)句:
int g = 20;
但是下面這個(gè)就不是一個(gè)有效的語(yǔ)句奖地,會(huì)生成編譯時(shí)錯(cuò)誤:
10 = 20;
(總結(jié):簡(jiǎn)單來說就是數(shù)字不能作為被賦值的符號(hào)橄唬,我們可以對(duì)某個(gè)字母或者字符串進(jìn)行賦值,但是不能對(duì)數(shù)字進(jìn)行賦值参歹,數(shù)字就是數(shù)字仰楚,只能作為數(shù)字使用。被賦值的符號(hào)只能出現(xiàn)在賦值號(hào)的左邊犬庇,所賦值的值或者數(shù)只能出現(xiàn)在右邊僧界。)
2019年3月10日晚完成