什么是數(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前后不能有空格
- 以冪的形式表示, 以字母e或字母E后跟一個10為底的冪數(shù)
- 小數(shù)形式
-
字符常量
- 字符型常量都是用''(單引號)括起來的。例如:'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é)



