C·Quickstart(變量與變量類型)

前一篇快速地瀏覽了幾種常見的功能忙芒,不過(guò)對(duì)于真正理解其中的概念來(lái)說(shuō)凰棉,一篇文章是遠(yuǎn)遠(yuǎn)不夠的膀哲。因此,接下來(lái)的幾篇就詳細(xì)討論一下這些出現(xiàn)的概念被碗。

因?yàn)橹黝}是快速入門某宪,所以著眼點(diǎn)還是在于實(shí)用性。這些介紹不會(huì)覆蓋所有的知識(shí)點(diǎn)锐朴,而是著力于使你有一個(gè)解決問(wèn)題的思路兴喂,細(xì)節(jié)在需要的時(shí)候查查資料就好了。只要思路清晰了焚志,編程就不再困難衣迷。那么,就讓正文開始吧酱酬!

變量以及它們的類型

變量這個(gè)概念壶谒,如果用比喻的方式來(lái)說(shuō)明就會(huì)很好理解。

variable.png

一個(gè)變量膳沽,就相當(dāng)于一個(gè)盒子汗菜,里面存放了數(shù)字。對(duì)于這個(gè)盒子挑社,我們可以把數(shù)字取出來(lái)查看陨界,也可以把舊數(shù)字丟掉,換成新的數(shù)字痛阻。因?yàn)楹凶永锏臄?shù)字可以修改菌瘪,所以它就是一個(gè)變化的量,簡(jiǎn)稱變量阱当。

為了存放不同類型的數(shù)字俏扩,我們需要不同類型的盒子。在C語(yǔ)言中斗这,最常用到的有以下幾種類型:

  • 整數(shù) int
  • 單精度浮點(diǎn)數(shù) float
  • 雙精度浮點(diǎn)數(shù) double
  • 字符 char
  • 布爾類型 bool

這些基本的變量动猬,以及它們的組合,滿足了我們平時(shí)見到的絕大部分程序的需求表箭。從快速入門的角度來(lái)說(shuō),熟悉這些就滿足了最低限度的要求钮莲。

首先免钻,聲明變量!

聲明變量相當(dāng)于創(chuàng)建出了一個(gè)盒子崔拥,給盒子取個(gè)名字极舔,這是使用變量的第一步。像這樣:

int number; //聲明一個(gè)變量叫number
int x,y,z; //同時(shí)聲明多個(gè)變量

這樣就是一個(gè)int類型的變量链瓦。也可以在聲明時(shí)一起賦值拆魏,這叫做初始化(initialization)盯桦,就是一開始就把一個(gè)數(shù)字放進(jìn)盒子里。

int number = 0;
int x=1, y, z=3; //x為1渤刃,y未初始化拥峦,z為3

初始化是很推薦的,因?yàn)槿绻兞繘](méi)有初始化卖子,它的值可能是任意的略号。如果沒(méi)有為它賦值,而是直接讀取了這個(gè)任意的初始值洋闽,程序會(huì)出現(xiàn)無(wú)法預(yù)料的運(yùn)行結(jié)果玄柠。人難免會(huì)疏忽,所以為了避免自己的大意诫舅,初始化是一種保險(xiǎn)的辦法羽利。

float dog = 1.0f;  //f 表明這個(gè)數(shù)字是float類型的,可以不加
double cat = 1.0;  //沒(méi)有f結(jié)尾的小數(shù)刊懈,編譯器認(rèn)為是double
char fish = 'A';   //字符的初始化就是用單引號(hào)加一個(gè)字符
bool isPig = false; //布爾類型只有true 或 false兩種值

字符是一種特殊的變量铐伴,雖然我們操作的時(shí)候用單引號(hào)和字符,但本質(zhì)上它以數(shù)字的形式存儲(chǔ)在計(jì)算機(jī)中俏讹。另外当宴,你可能會(huì)吐槽,這單個(gè)字符有什么用啊泽疆,至少也要能存單詞吧户矢!嗯,你的直覺(jué)非常敏銳殉疼!這涉及到了字符串梯浪,另一個(gè)很重要的概念。

布爾類型是另一種特殊的變量瓢娜,只有true或false兩個(gè)值挂洛,也就是“是”和“否”兩種情況。這在控制流中很有用眠砾。

字符和布爾類型我會(huì)在后續(xù)的文章中詳細(xì)介紹的虏劲,總之先來(lái)看這些簡(jiǎn)單的數(shù)值變量吧!

開始計(jì)算褒颈!

有了盒子柒巫,我們可以對(duì)它做很多奇奇怪怪的事情。首先還是聲明:

int a, b = 0;     // a未初始化谷丸,b初始化為0

之后為a賦值:

a = 1;        //令a為1
a = a + 1;    //讓a增加1
a ++;         //讓a增加1的另一種寫法
a = b;        //把b的值賦給a
a = 1.0;      //???

這樣就能把想要的數(shù)字塞進(jìn)盒子里堡掏,把舊的數(shù)字替換掉了。

語(yǔ)句的功能我在注釋中寫明了刨疼,不難理解泉唁。我相信你可以仿照這些語(yǔ)句鹅龄,把數(shù)值修改為自己想要的結(jié)果。在最后一句中亭畜,我把double類型的值賦給了int類型的變量扮休,你猜它會(huì)是什么結(jié)果呢?我先賣個(gè)關(guān)子贱案,在本文的后半部分肛炮,你會(huì)找到答案。

輸出看看宝踪!

依然是出于實(shí)用性的考慮侨糟,我們要把數(shù)值打印出來(lái),不然我們既沒(méi)辦法獲得計(jì)算結(jié)果瘩燥,也沒(méi)辦法檢查計(jì)算得對(duì)不對(duì)秕重,不是嗎?為了打印數(shù)字厉膀,我們用到printf函數(shù)溶耘。

這里插一句,printf指的是print format服鹅。print是打印凳兵,format 是格式化字符串的意思。這個(gè)函數(shù)接收字符串作為參數(shù)企软,把它打印在屏幕上庐扫。如果按照一定的格式來(lái)書寫這個(gè)字符串,我們就可以打印變量的值仗哨。

int a = 0;
printf("An integer: %d\n", a);

輸出結(jié)果:

An integer: 0

這里形庭,printf接收了兩個(gè)參數(shù),第一個(gè)是格式化的字符串厌漂,第二個(gè)是變量a萨醒。為了輸出整數(shù)類型,我們?cè)谧址行枰湃霐?shù)值的位置放入"%d"苇倡,這叫做格式控制符富纸。有了格式控制符,printf會(huì)在參數(shù)表中按順序搜索雏节,發(fā)現(xiàn)了變量a胜嗓,就把它的值打印在控制符對(duì)應(yīng)的位置了」痴В“\n”表示換行符,它后面的文字會(huì)出現(xiàn)在下一行怔锌。

適用于不同類型的輸出控制符是不一樣的:

  • 整數(shù) %d
  • 單精度浮點(diǎn)數(shù) %f
  • 雙精度浮點(diǎn)數(shù) %lf
  • 字符 %c
printf("Four types: %d %f %lf %c",5, 1.5f, 2.0, 'A');

這里直接把數(shù)值傳遞給了printf寥粹,這也是可以的变过。在這一句中,一共出現(xiàn)了4個(gè)控制符涝涤,printf會(huì)搜索4個(gè)變量媚狰,把它們的值打印在對(duì)應(yīng)的位置。

類型轉(zhuǎn)換

既然都是數(shù)字阔拳,那么它們當(dāng)然可以互相轉(zhuǎn)換崭孤,只是在轉(zhuǎn)換的過(guò)程中會(huì)發(fā)生信息的丟失。比如從浮點(diǎn)數(shù)3.14轉(zhuǎn)換到整數(shù)糊肠,結(jié)果是3辨宠,小數(shù)部分會(huì)丟失。

所以基本上货裹,信息量double > float > int嗤形,轉(zhuǎn)換時(shí)盡量不要把信息量大的類型轉(zhuǎn)換到小的。

類型轉(zhuǎn)換的方法:

(1) 編譯器自動(dòng)轉(zhuǎn)換:

int a = 5;
float b = 3.5f;
float c = a * b; //a被臨時(shí)轉(zhuǎn)換為float弧圆,與b的類型相匹配

在這里赋兵,編譯器會(huì)把a(bǔ)臨時(shí)變成float類型,然后計(jì)算出結(jié)果搔预。這樣的臨時(shí)轉(zhuǎn)換不會(huì)改變a自己的值和類型霹期。

int a = 0;
float b = 3.5f;
a = b;

這時(shí),為了把b的值賦給a拯田,編譯器把float類型轉(zhuǎn)換成了int历造。當(dāng)然小數(shù)部分丟掉了,結(jié)果是3勿锅。反過(guò)來(lái)帕膜,如果是把int賦值給float,則不會(huì)發(fā)生信息的丟失溢十。

(2) 手動(dòng)轉(zhuǎn)換:
手動(dòng)轉(zhuǎn)換的意義在于避免整數(shù)相除可能會(huì)造成的尷尬后果:

int a = 5;
int b = 10;
float c = a/b;

你猜結(jié)果是多少垮刹?0.0f。因?yàn)閕nt類型之間發(fā)生的除法結(jié)果仍然是int類型张弛,所以5/10取整之后變成了0荒典。0被賦值給了float類型的c,就成了0.0f吞鸭。為了糾正這種情況寺董,要把代碼改成下面這樣:

int a = 5;
int b = 10;
float c = (float)a/b;

這里加了一個(gè)括號(hào),就把a(bǔ)手動(dòng)轉(zhuǎn)換為了float刻剥。為了與float類型的a計(jì)算遮咖,b會(huì)被自動(dòng)轉(zhuǎn)換為float,因此最后得到0.5f造虏。這樣的手動(dòng)轉(zhuǎn)換也是臨時(shí)的御吞,a本身不會(huì)受到影響麦箍。

寫到這里,你一定知道了前面的問(wèn)題的答案了陶珠。靶选?哪個(gè)問(wèn)題揍诽?這個(gè)呀诀蓉,這個(gè):

int a;
a = 2.0;

a的值是多少,現(xiàn)在看來(lái)答案是很顯然的了暑脆,快寫個(gè)小程序驗(yàn)證一下吧渠啤!

小練習(xí)

雖然這篇文章其實(shí)沒(méi)寫多少內(nèi)容,但是考慮到寫太長(zhǎng)了很難讀饵筑,先寫到這里好了埃篓。如果之后覺(jué)得不妥,還會(huì)調(diào)整篇幅根资,那么留下幾個(gè)小練習(xí):

  • 嘗試使用幾種類型變量架专,并且做些轉(zhuǎn)換
  • 輸出幾種類型的變量的值

就到這里,我們下一篇再見啦~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末玄帕,一起剝皮案震驚了整個(gè)濱河市部脚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌裤纹,老刑警劉巖委刘,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鹰椒,居然都是意外死亡锡移,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門漆际,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)淆珊,“玉大人,你說(shuō)我怎么就攤上這事奸汇∈┓” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵擂找,是天一觀的道長(zhǎng)戳吝。 經(jīng)常有香客問(wèn)我,道長(zhǎng)贯涎,這世上最難降的妖魔是什么听哭? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上欢唾,老公的妹妹穿的比我還像新娘且警。我一直安慰自己粉捻,他們只是感情好礁遣,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肩刃,像睡著了一般祟霍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盈包,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天沸呐,我揣著相機(jī)與錄音,去河邊找鬼呢燥。 笑死崭添,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的叛氨。 我是一名探鬼主播呼渣,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼寞埠!你這毒婦竟也來(lái)了屁置?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤仁连,失蹤者是張志新(化名)和其女友劉穎蓝角,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饭冬,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡使鹅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了昌抠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片患朱。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扰魂,靈堂內(nèi)的尸體忽然破棺而出麦乞,到底是詐尸還是另有隱情,我是刑警寧澤劝评,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布姐直,位于F島的核電站,受9級(jí)特大地震影響蒋畜,放射性物質(zhì)發(fā)生泄漏声畏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望插龄。 院中可真熱鬧愿棋,春花似錦、人聲如沸均牢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)徘跪。三九已至甘邀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間垮庐,已是汗流浹背松邪。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哨查,地道東北人逗抑。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像寒亥,于是被迫代替她去往敵國(guó)和親邮府。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容