05-C語言常量和變量-指趣學(xué)院

什么是數(shù)據(jù)?

  • 生活中無時無刻都在跟數(shù)據(jù)打交道

    • 例如:人的體重、身高、收入、性別等數(shù)據(jù)等
  • 在我們使用計算機(jī)的過程中,也會接觸到各種各樣的數(shù)據(jù)

    • 例如: 文檔數(shù)據(jù)、圖片數(shù)據(jù)、視頻數(shù)據(jù)等

數(shù)據(jù)分類

  • 靜態(tài)的數(shù)據(jù)

    • 靜態(tài)數(shù)據(jù)是指一些永久性的數(shù)據(jù),一般存儲在硬盤中。硬盤的存儲空間一般都比較大,現(xiàn)在普通計算機(jī)的硬盤都有500G左右,因此硬盤中可以存放一些比較大的文件
    • 存儲的時長:計算機(jī)關(guān)閉之后再開啟,這些數(shù)據(jù)依舊還在,只要你不主動刪掉或者硬盤沒壞,這些數(shù)據(jù)永遠(yuǎn)都在
    • 哪些是靜態(tài)數(shù)據(jù):靜態(tài)數(shù)據(jù)一般是以文件的形式存儲在硬盤上,比如文檔、照片、視頻等。
  • 動態(tài)的數(shù)據(jù)

    • 動態(tài)數(shù)據(jù)指在程序運行過程中,動態(tài)產(chǎn)生的臨時數(shù)據(jù),一般存儲在內(nèi)存中。內(nèi)存的存儲空間一般都比較小,現(xiàn)在普通計算機(jī)的內(nèi)存只有8G左右,因此要謹(jǐn)慎使用內(nèi)存,不要占用太多的內(nèi)存空間
    • 存儲的時長:計算機(jī)關(guān)閉之后,這些臨時數(shù)據(jù)就會被清除
    • 哪些是動態(tài)數(shù)據(jù):當(dāng)運行某個程序(軟件)時,整個程序就會被加載到內(nèi)存中,在程序運行過程中,會產(chǎn)生各種各樣的臨時數(shù)據(jù),這些臨時數(shù)據(jù)都是存儲在內(nèi)存中的。當(dāng)程序停止運行或者計算機(jī)被強(qiáng)制關(guān)閉時,這個程序產(chǎn)生的所有臨時數(shù)據(jù)都會被清除。
  • 既然硬盤的存儲空間這么大,為何不把所有的應(yīng)用程序加載到硬盤中去執(zhí)行呢?

    • 主要原因就是內(nèi)存的訪問速度比硬盤快N倍

  • 靜態(tài)數(shù)據(jù)和動態(tài)數(shù)據(jù)的相互轉(zhuǎn)換
    • 也就是從磁盤加載到內(nèi)存
  • 動態(tài)數(shù)據(jù)和靜態(tài)數(shù)據(jù)的相互轉(zhuǎn)換
    • 也就是從內(nèi)存保存到磁盤
  • 數(shù)據(jù)的計量單位
    • 不管是靜態(tài)還是動態(tài)數(shù)據(jù),都是0和1組成的
    • 數(shù)據(jù)越大,包含的0和1就越多
1 B(Byte字節(jié)) = 8 bit(位)
// 00000000 就是一個字節(jié)
// 111111111 也是一個字節(jié)
// 10101010 也是一個字節(jié)
// 任意8個0和1的組合都是一個字節(jié)
1 KB(KByte) = 1024 B
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB

C語言數(shù)據(jù)類型

  • 作為程序員, 我們最關(guān)心的是內(nèi)存中的動態(tài)數(shù)據(jù),因為我們寫的程序就是在內(nèi)存中運行的
  • 程序在運行過程中會產(chǎn)生各種各樣的臨時數(shù)據(jù),為了方便數(shù)據(jù)的運算和操作, C語言對這些數(shù)據(jù)進(jìn)行了分類, 提供了豐富的數(shù)據(jù)類型
  • C語言中有4大類數(shù)據(jù)類型:基本類型、構(gòu)造類型、指針類型、空類型

什么是常量?

  • "量"表示數(shù)據(jù)。常量,則表示一些固定的數(shù)據(jù),也就是不能改變的數(shù)據(jù)
  • 就好比現(xiàn)實生活中生男生女一樣, 生下來是男孩永遠(yuǎn)都是男孩, 生下來是女孩就永遠(yuǎn)都是女孩, 所以性別就是現(xiàn)實生活中常量的一種體現(xiàn)
    • 不要和江哥吹牛X說你是泰國來的, 如果你真的來自泰國, 我只能說你贏了

常量的類型

  • 整型常量

    • 十進(jìn)制整數(shù)。例如:666,-120, 0
    • 八進(jìn)制整數(shù),八進(jìn)制形式的常量都以0開頭。例如:0123,也就是十進(jìn)制的83;-011,也就是十進(jìn) 制的-9
    • 十六進(jìn)制整數(shù),十六進(jìn)制的常量都是以0x開頭。例如:0x123,也就是十進(jìn)制的291
    • 二進(jìn)制整數(shù),逢二進(jìn)一 0b開頭。例如: 0b0010,也就是十進(jìn)制的2
  • 實型常量

    • 小數(shù)形式
      • 單精度小數(shù):以字母f或字母F結(jié)尾。例如:0.0f、1.01f
      • 雙精度小數(shù):十進(jìn)制小數(shù)形式。例如:3.14、 6.66
      • 默認(rèn)就是雙精度
      • 可以沒有整數(shù)位只有小數(shù)位。例如: .3、 .6f
    • 指數(shù)形式
      • 以冪的形式表示, 以字母e或字母E后跟一個10為底的冪數(shù)
        • 上過初中的都應(yīng)該知道科學(xué)計數(shù)法吧,指數(shù)形式的常量就是科學(xué)計數(shù)法的另一種表 示,比如123000,用科學(xué)計數(shù)法表示為1.23×10的5次方
        • 用C語言表示就是1.23e5或1.23E5
        • 字母e或字母E后面的指數(shù)必須為整數(shù)
        • 字母e或字母E前后必須要有數(shù)字
        • 字母e或字母E前后不能有空格
  • 字符常量

    • 字符型常量都是用''(單引號)括起來的。例如:'a'、'b'、'c'
    • 字符常量的單引號中只能有一個字符
    • 特殊情況: 如果是轉(zhuǎn)義字符,單引號中可以有兩個字符。例如:'\n'、'\t'
  • 字符串常量

    • 字符型常量都是用""(雙引號)括起來的。例如:"a"、"abc"、"lnj"
    • 系統(tǒng)會自動在字符串常量的末尾加一個字符'\0'作為字符串結(jié)束標(biāo)志
  • 自定義常量

    • 后期講解內(nèi)容, 此處先不用了解
  • 常量類型練習(xí)

123 1.1F 1.1 .3 'a' "a" "李南江"

什么是變量?

  • "量"表示數(shù)據(jù)。變量,則表示一些不固定的數(shù)據(jù),也就是可以改變的數(shù)據(jù)
  • 就好比現(xiàn)實生活中人的身高、體重一樣, 隨著年齡的增長會不斷發(fā)生改變, 所以身高、體重就是現(xiàn)實生活中變量的一種體現(xiàn)
  • 就好比現(xiàn)實生活中超市的儲物格一樣, 同一個格子在不同時期不同人使用,格子中存儲的物品是可以變化的。張三使用這個格子的時候里面放的可能是尿不濕, 但是李四使用這個格子的時候里面放的可能是面包

如何定義變量

  • 格式1: 變量類型 變量名稱 ;
    • 為什么要定義變量?
      • 任何變量在使用之前,必須先進(jìn)行定義, 只有定義了變量才會分配存儲空間, 才有空間存儲數(shù)據(jù)
    • 為什么要限定類型?
      • 用來約束變量所存放數(shù)據(jù)的類型。一旦給變量指明了類型,那么這個變量就只能存儲這種類型的數(shù)據(jù)
      • 內(nèi)存空間極其有限,不同類型的變量占用不同大小的存儲空間
    • 為什么要指定變量名稱?
      • 存儲數(shù)據(jù)的空間對于我們沒有任何意義, 我們需要的是空間中存儲的值
      • 只有有了名稱, 我們才能獲取到空間中的值
int a;
float b;
char ch;
  • 格式2:變量類型 變量名稱,變量名稱;
    • 連續(xù)定義, 多個變量之間用逗號(,)號隔開
int a,b,c;
  • 變量名的命名的規(guī)范
    • 變量名屬于標(biāo)識符,所以必須嚴(yán)格遵守標(biāo)識符的命名原則

如何使用變量?

  • 可以利用=號往變量里面存儲數(shù)據(jù)
    • 在C語言中,利用=號往變量里面存儲數(shù)據(jù), 我們稱之為給變量賦值
int value;
value = 998; // 賦值
  • 注意:
    • 這里的=號,并不是數(shù)學(xué)中的“相等”,而是C語言中的賦值運算符,作用是將右邊的整型常量998賦值給左邊的整型變量value
    • 賦值的時候,= 號的左側(cè)必須是變量 (10=b,錯誤)
    • 為了方便閱讀代碼, 習(xí)慣在 = 的兩側(cè) 各加上一個 空格

變量的初始化

  • C語言中, 變量的第一次賦值,我們稱為“初始化”
  • 初始化的兩種形式
    • 先定義,后初始化
    • int value; value = 998; // 初始化
    • 定義時同時初始化
    • int a = 10; int b = 4, c = 2;
    • 其它表現(xiàn)形式(不推薦)
int a, b = 10; //部分初始化
int c, d, e;
c = d = e =0;
  • 不初始化里面存儲什么?
    • 隨機(jī)數(shù)
    • 上次程序分配的存儲空間,存數(shù)一些 內(nèi)容,“垃圾”
    • 系統(tǒng)正在用的一些數(shù)據(jù)

如何修改變量值?

  • 多次賦值即可
    • 每次賦值都會覆蓋原來的值
int i = 10;
i = 20; // 修改變量的值

變量之間的值傳遞

  • 可以將一個變量存儲的值賦值給另一個變量
 int a = 10;
 int b = a; // 相當(dāng)于把a(bǔ)中存儲的10拷貝了一份給b

如何查看變量的值?

  • 使用printf輸出一個或多個變量的值
int a = 10, c = 11;
printf("a=%d, c=%d", a, c);
  • 輸出其它類型變量的值
double height = 1.75;
char blood = 'A';
printf("height=%.2f, 血型是%c", height,  blood);

變量的作用域

  • C語言中所有變量都有自己的作用域
  • 變量定義的位置不同,其作用域也不同
  • 按照作用域的范圍可分為兩種, 即局部變量和全局變量

  • 局部變量
    • 局部變量也稱為內(nèi)部變量
    • 局部變量是在代碼塊內(nèi)定義的, 其作用域僅限于代碼塊內(nèi), 離開該代碼塊后無法使用
int main(){
    int i = 998; // 作用域開始
    return 0;// 作用域結(jié)束
}
int main(){
    {
        int i = 998; // 作用域開始
    }// 作用域結(jié)束
    printf("i = %d\n", i); // 不能使用
    return 0;
}
int main(){
    {
        {
            int i = 998;// 作用域開始
        }// 作用域結(jié)束
        printf("i = %d\n", i); // 不能使用
    }
    return 0;
}

  • 全局變量
    • 全局變量也稱為外部變量,它是在代碼塊外部定義的變量
int i = 666;
int main(){
    printf("i = %d\n", i); // 可以使用
    return 0;
}// 作用域結(jié)束
int call(){
    printf("i = %d\n", i); // 可以使用
    return 0;
}

  • 注意點:
    • 同一作用域范圍內(nèi)不能有相同名稱的變量
int main(){
    int i = 998; // 作用域開始
    int i = 666; // 報錯, 重復(fù)定義
    return 0;
}// 作用域結(jié)束
int i = 666; 
int i = 998; // 報錯, 重復(fù)定義
int main(){
    return 0;
}
    • 不同作用域范圍內(nèi)可以有相同名稱的變量
int i = 666; 
int main(){
    int i = 998; // 不會報錯
    return 0;
}
int main(){
    int i = 998; // 不會報錯
    return 0;
}
int call(){
    int i = 666;  // 不會報錯
    return 0;
}

變量內(nèi)存分析(簡單版)

  • 字節(jié)和地址

    • 為了更好地理解變量在內(nèi)存中的存儲細(xì)節(jié),先來認(rèn)識一下內(nèi)存中的“字節(jié)”和“地址”
    • 每一個小格子代表一個字節(jié)
    • 每個字節(jié)都有自己的內(nèi)存地址
    • 內(nèi)存地址是連續(xù)的
  • 變量存儲占用的空間

    • 一個變量所占用的存儲空間,和定義變量時聲明的類型以及當(dāng)前編譯環(huán)境有關(guān)
類型 16位編譯器 32位編譯器 64位編譯器
char 1 1 1
int 2 4 4
float 4 4 4
double 8 8 8
short 2 2 2
long 4 4 8
long long 8 8 8
void* 2 4 8
  • 變量存儲的過程
    • 根據(jù)定義變量時聲明的類型和當(dāng)前編譯環(huán)境確定需要開辟多大存儲空間
    • 在內(nèi)存中開辟一塊存儲空間,開辟時從內(nèi)存地址大的開始開辟(內(nèi)存尋址從大到小)
    • 將數(shù)據(jù)保存到已經(jīng)開辟好的對應(yīng)內(nèi)存空間中
    int main(){
      int number;
      int value;
      number = 22;
      value = 666;
    }
    
    #include <stdio.h>
    int main(){
        int number;
        int value;
        number = 22;
        value = 666;
        printf("&number = %p\n", &number); // 0060FEAC
        printf("&value = %p\n", &value);   // 0060FEA8
    }
    

先不要著急, 剛開始接觸C語言, 我先了解這么多就夠了. 后面會再次更深入的講解存儲的各種細(xì)節(jié)


配套視頻地址:www.it666.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容