C語言探索之旅 | 第一部分第五課:變量的世界(二),變量聲明

做者 謝恩銘,公衆號「程序員聯盟」。 轉載請註明出處。 原文:www.jianshu.com/p/8db33987c…git

《C語言探索之旅》全系列程序員

內容簡介


  1. 變量是什麼?
  2. 給變量起個名字
  3. 變量的類型
  4. 聲明變量
  5. const 關鍵字
  6. 第一部分第六課預告

1. 變量是什麼?


上一課咱們學習的是 C語言探索之旅 | 第一部分第四課:變量的世界(一),內存那檔事。相信我,上一課對於內存的初探絕對頗有用。這一課咱們一塊兒來學習變量的聲明。github

簡單地說,變量就是暫時儲存在內存中的一小段信息bash

爲何叫作變量呢?函數

變量的英語是 variable,作形容詞用的話是「可變的,易變的」之意,因此變量就是在程序運行期間其值能夠改變的量。學習

你將會看到,咱們寫的程序,經常是充滿變量的。ui

在 C語言中(大多數語言也是如此),一個變量有兩部分:編碼

  • 變量的值:變量所儲存的值,好比 5。
  • 變量的名字:是用來標識一個變量的。對於學了上一課有些擔憂是否須要用內存地址值做爲變量的朋友,不用怕,在 C語言中,咱們不用地址值做爲變量名字,咱們只須要給它取個名字,編譯器會負責把這個名字轉換成內存地址值,是否是感受鬆了一口氣?

2. 給變量起個名字


在 C語言中,每個變量必需要有一個名字。咱們可不能隨便取名字,還要遵照一些限制條件:spa

  • 只能包含英文的大小寫字母,數字和下劃線(_),其餘一概禁止。
  • 必須以字母開頭。

如下是一些正確的變量名:操作系統

dog,cat_and_mouse,Catch_1_mouSe,hao123COM

還要記得的是,C語言對大小寫敏感,因此,hello 和 Hello 是兩個不一樣的變量名。

每個程序員都有本身命名變量的習慣,我來講說本課程的變量命名習慣吧:

  • 變量名都以小寫字母開頭。
  • 若是變量名有好幾個單詞組成,那麼除了第一個單詞的首字母小寫以外,其餘單詞的首字母都大寫。

但願你們在以後的練習題中也能儘可能保持一致的命名習慣(其實這是比較通用的命名法)。

命名變量時,儘可能使之清晰易懂,若是我把一個變量 petName(表示是「寵物名字」)縮寫爲 pN,雖然短小精悍,可是閱讀代碼的人確定猜不出來是什麼意思。

咱們要儘可能作到代碼是能夠「自注釋」的,就是說光看變量名就能夠知道這個變量的用途,不少時候就能夠省略註釋了。

3. 變量的類型


咱們的電腦兄,實際上是一臺笨笨的機器,只知道計算,只能處理數字。

可是,在 C語言當中,數字卻有好多類型:

  • 正整數,如 2,49,186,6715。
  • 含有小數點的正數,如 3.14159,27.62,80.19732。
  • 負整數,如 -7,-999,-4321。
  • 含有小數點的負數,如 -6.753,-78.46,-5641.73。

怎麼有這麼多亂七八糟的類型啊,可憐的電腦兄須要幫助...

因此,當你要求電腦儲存一個數字時,須要給出類型。倒並非說電腦沒辦法區分,而是爲了電腦能更好地規劃,也爲了避免佔用多餘的內存。

所以,在 C語言中,當咱們聲明一個變量時,必需要給出變量類型。

下表列出了主要的一些類型:

類型名 最小值 最大值
signed char -128 127
int -32768 32767
long -2147483648 2147483647
float -1 x 10^37 1 x 10^37
double -1 x 10^37 1 x 10^37

注意:上面列出的數據是 C語言所保證的最小的取值範圍。實際上,你每每能夠在上述類型中存放更大的數值。 例如,這裏的 int 保證最小取值範圍是 -32768 到 32767,是針對 2 字節大小的 int 型來講的。通常如今的 32 位或 64 位操做系統裏 int 是 4 字節,取值範圍是 -2147483648 到 2147483647。

不過,最好能稍微記得上表中的值,對你正確選擇變量類型有幫助。

固然 C語言還有其餘的變量類型,上表只是列出了經常使用的。

下面給出 C語言全部變量類型:

C語言全部變量類型

以前的表格中前三種類型(signed char,int,long)用於聲明整數。如:6,74,8931,等。

後兩種類型(float,double)用於聲明浮點數(包含小數點的數)。如:7.64,61.467,等。

以後的課程你會看到整數用得最多,由於簡單易用。

說一下 signed 和 unsigned 的區別:signed 就是有符號的,就是最開始有正號或者負號(正數或負數),如 7,-5,9.2,-23.8,等。unsigned 是無符號數,只能是正數或零,如 35,7461,61.789,等。

因此 signed int 就是有符號整數,unsigned int 是無符號整數。依此類推。

signed 和 unsigned 放在 int,long,char,float,double 等類型的前面。

類型名 最小值 最大值
unsigned char 0 255
unsigned int 0 65535
unsigned long 0 4294967295

上面的表格中,咱們能夠看到,unsigned 類型不能儲存負數,可是相比 signed 類型的優點是能夠儲存兩倍於 signed 類型的最大值,例如 signed char 最大值是 127,unsigned char 最大值是 255。

char 實際上也能夠當作是一種整型(這樣說可能有點錯誤),由於每一個字符的編碼實際上也是用整型編的(能夠查 ASCII 碼錶)。若是你將它強行轉換爲整型,是能夠轉的。不少時候,咱們都會將 char 轉成整型來計算或比較,舉個例子,'A'(大寫字母 A)對應 65。

爲何對於整數,以前的表裏面列出了三種類型:char,int,long 呢?一種不夠嗎?

是這樣的,C語言最初建立多種整數類型的目的是爲了節約內存。若是咱們聲明一個 char 類型的變量,相比於 int 類型,電腦所使用的內存空間就要小。

固然了,在內存頗有限的那個年代(「遙想公瑾當年,小喬初嫁了...」),多種整數類型頗有用。今天,咱們的電腦有至關多的內存(「俱往矣,數風流人物,還看今朝~」),因此通常已經不須要捉襟見肘地聲明變量了。不過,對於內存有限的嵌入式的某些應用,仍是須要謹慎地使用整數類型。

作個小結:

  • 對於整數,通常用 int。
  • 對於浮點數,通常用 double。

4. 聲明變量


作了這麼多鋪墊,終於到了咱們的主題了。如今,建立一個新的控制檯項目,就取名叫 Variable 吧。

咱們一塊兒來學習如何聲明變量,也就是請求電腦分配一些內存空間給咱們使用。

聲明變量其實很簡單,你應該知道怎麼作了。只須要按照下面的順序:

  1. 寫上咱們要建立的變量的類型。
  2. 空一格。
  3. 寫上你給變量取的名字。
  4. 最後,不要忘了加上分號。

好比,我能夠這樣聲明一些變量

int growthOfEconomy;
double averageSalary;
unsigned int numberOfDogs
複製代碼

以上咱們所作的被稱爲「變量聲明」,請記住這個術語。你應該在函數的開始聲明變量。既然咱們目前只有一個函數:main 函數,咱們就這樣聲明一個變量:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int numberOfDogs;

    return 0;
}
複製代碼

若是你運行上述程序,你會驚訝的發現:這個程序貌似啥也沒幹。

一些解釋


好了,在你要指控我欺騙你以前,容我辯解一下:

事實上,這個程序是幹了一些事情,只不過你看不到。當程序讀到變量聲明那一行時,它頗有禮貌地詢問電腦是否能夠用一些內存空間。

若是一切順利,電腦會回答「好的,沒問題,拿一些內存空間去吧」。一般來講,是會順利進行的。因此你的變量通常來講(除非內存不夠了,可是不多會這樣,由於你只是要求分配一個 int 的空間,不多的)確定建立了。

一個小「技巧」:若是你有好幾個同一類型的變量要聲明,不必每個變量的聲明都寫一行,你能夠都寫在一行上,例如:

int numberOfDogs, numberOfCats, numberOfMouses;
複製代碼

就同時聲明瞭三個 int 類型的變量:numberOfDogs,numberOfCats,numberOfMouses 。

而後呢?

既然咱們已經聲明瞭變量,那咱們接下來能夠給變量賦一個值。

沒有比這更簡單的了。若是你要給上面的變量 numberOfDogs 賦值,只要這樣寫

numberOfDogs = 7;
複製代碼

不用作什麼其餘的了。你寫上變量名,而後寫一個等號,接着寫你要給它的值。

上面,咱們剛把 7 賦給了 numberOfDogs(表示「狗的數目」)。

所以,咱們的完整程序如今是這樣的:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int numberOfDogs;
    numberOfDogs = 7;    // 有七條狗

    return 0;
}
複製代碼

此次你若是運行一下,也沒有發生什麼,屏幕上什麼也沒顯示。但其實一切都悄然在內存中進行,只不過你看不到罷了。

在你電腦深處的某個地方,一小塊內存上剛儲存了 7 這個值。是否是很神奇呢?

咱們能夠試着改變變量的值,好比像這樣:

int numberOfDogs; 
numberOfDogs = 7;
numberOfDogs = 6;
numberOfDogs = 5;
複製代碼

上述例子中,numberOfDogs 這個 int 類型的變量首先會被賦值爲 7,以後改成 6,再改成 5。由於你的電腦運算速度太快,因此這一系列操做都是瞬間就完成了。還沒來得及眨眼,你的變量 numberOfDogs 的值就從 7,變爲 6,再變爲 5。

新的變量的值


如今來看一個很重要的問題:當咱們聲明一個變量時,它的初始值是多少呢?

實際上,當電腦讀到這一行:

int numberOfDogs;
複製代碼

首先,它在內存中取了一小塊出來給 numberOfDogs 用。可是這時 numberOfDogs 的值是多少呢?有沒有一個默認值(好比 0)呢?

答案是:沒有。

沒有默認值。事實上,內存的這小塊區域是給了 numberOfDogs,可是上面的值並無改變,咱們並無清空在這小塊內存上原來有的值。因此,你的變量 numberOfDogs 的初始值就是在那一小塊內存上的值,這個值能夠是任意的。

若是這塊內存的值先前沒有改變過,那多是 0。

你並不能肯定,有可能初始值是 45 或 182,由於可能以前有一個程序已經改變了那塊地址上的值。

因此要當心,最好的解決方案是當你聲明變量時,同時爲它賦一個初值:

int numberOfDogs = 7;
複製代碼

這裏,int 型變量 numberOfDogs 被聲明,而且當即被賦值爲 7。

這樣作的好處是:你能夠肯定這個變量的值是什麼,不會是任意的一個數。

5. const 關鍵字


有時咱們想要使用一個變量,咱們又但願它的值在程序中保持不變。就是說,一旦聲明,你但願你的變量就保持它的初始值,沒有人能更動它。

這種特殊的變量被稱爲 constant(表示「恆定的,不變的」)變量,由 const 關鍵字修飾。

有的書本說 const 修飾的是常量,這種說法是不許確的。const 修飾的是變量,只不過是只讀的變量。由於加上 const 以後,值就不能再改變了。

如何聲明一個 constant 變量呢?很簡單:

只要把 const 關鍵字放在你的變量的類型前面(放在後面也是能夠的),此外,聲明 constant 變量時,必須給它賦初值!

例如:

const int NUMBER_OF_DOGS = 7;
複製代碼

並非必定要大寫 const 變量的名字,只是通常用大寫,這已經成爲了一個約定俗成的習慣。

除了值不能改變,const 變量和通常變量同樣。只不過假如你要在以後的程序中改變 const 變量的值,編譯器會提示一個錯誤,例如:

[Warning] assignment of read-only variable 'NUMBER_OF_DOGS'
(表示「[警告] 試圖改變只讀變量 NUMBER_OF_DOGS 的值」)
複製代碼

6. 第一部分第六課預告


今天的課就到這裏,一塊兒加油吧!

下一課:C語言探索之旅 | 第一部分第六課:變量的世界(三),顯示變量內容


我是 謝恩銘,公衆號「程序員聯盟」運營者,慕課網精英講師 Oscar 老師,終生學習者。 熱愛生活,喜歡游泳,略懂烹飪。 人生格言:「向着標杆直跑」

相關文章
相關標籤/搜索