什么是數(shù)據(jù)漓藕?
-
生活中無(wú)時(shí)無(wú)刻都在跟數(shù)據(jù)打交道
- 例如:人的體重、身高内列、收入撵术、性別等數(shù)據(jù)等
-
在我們使用計(jì)算機(jī)的過(guò)程中,也會(huì)接觸到各種各樣的數(shù)據(jù)
- 例如: 文檔數(shù)據(jù)话瞧、圖片數(shù)據(jù)嫩与、視頻數(shù)據(jù)等
數(shù)據(jù)分類
-
靜態(tài)的數(shù)據(jù)
- 靜態(tài)數(shù)據(jù)是指一些永久性的數(shù)據(jù),一般存儲(chǔ)在硬盤中交排。硬盤的存儲(chǔ)空間一般都比較大划滋,現(xiàn)在普通計(jì)算機(jī)的硬盤都有500G左右,因此硬盤中可以存放一些比較大的文件
- 存儲(chǔ)的時(shí)長(zhǎng):計(jì)算機(jī)關(guān)閉之后再開(kāi)啟埃篓,這些數(shù)據(jù)依舊還在处坪,只要你不主動(dòng)刪掉或者硬盤沒(méi)壞,這些數(shù)據(jù)永遠(yuǎn)都在
- 哪些是靜態(tài)數(shù)據(jù):靜態(tài)數(shù)據(jù)一般是以文件的形式存儲(chǔ)在硬盤上架专,比如文檔同窘、照片、視頻等部脚。
-
動(dòng)態(tài)的數(shù)據(jù)
- 動(dòng)態(tài)數(shù)據(jù)指在程序運(yùn)行過(guò)程中想邦,動(dòng)態(tài)產(chǎn)生的臨時(shí)數(shù)據(jù),一般存儲(chǔ)在內(nèi)存中委刘。內(nèi)存的存儲(chǔ)空間一般都比較小丧没,現(xiàn)在普通計(jì)算機(jī)的內(nèi)存只有8G左右,因此要謹(jǐn)慎使用內(nèi)存锡移,不要占用太多的內(nèi)存空間
- 存儲(chǔ)的時(shí)長(zhǎng):計(jì)算機(jī)關(guān)閉之后呕童,這些臨時(shí)數(shù)據(jù)就會(huì)被清除
- 哪些是動(dòng)態(tài)數(shù)據(jù):當(dāng)運(yùn)行某個(gè)程序(軟件)時(shí),整個(gè)程序就會(huì)被加載到內(nèi)存中淆珊,在程序運(yùn)行過(guò)程中夺饲,會(huì)產(chǎn)生各種各樣的臨時(shí)數(shù)據(jù),這些臨時(shí)數(shù)據(jù)都是存儲(chǔ)在內(nèi)存中的。當(dāng)程序停止運(yùn)行或者計(jì)算機(jī)被強(qiáng)制關(guān)閉時(shí)往声,這個(gè)程序產(chǎn)生的所有臨時(shí)數(shù)據(jù)都會(huì)被清除茫蛹。
-
既然硬盤的存儲(chǔ)空間這么大,為何不把所有的應(yīng)用程序加載到硬盤中去執(zhí)行呢烁挟?
- 主要原因就是內(nèi)存的訪問(wèn)速度比硬盤快N倍
- 靜態(tài)數(shù)據(jù)和動(dòng)態(tài)數(shù)據(jù)的相互轉(zhuǎn)換
- 也就是從磁盤加載到內(nèi)存
- 動(dòng)態(tài)數(shù)據(jù)和靜態(tài)數(shù)據(jù)的相互轉(zhuǎn)換
- 也就是從內(nèi)存保存到磁盤
- 數(shù)據(jù)的計(jì)量單位
- 不管是靜態(tài)還是動(dòng)態(tài)數(shù)據(jù),都是0和1組成的
- 數(shù)據(jù)越大骨坑,包含的0和1就越多
1 B(Byte字節(jié)) = 8 bit(位)
// 00000000 就是一個(gè)字節(jié)
// 111111111 也是一個(gè)字節(jié)
// 10101010 也是一個(gè)字節(jié)
// 任意8個(gè)0和1的組合都是一個(gè)字節(jié)
1 KB(KByte) = 1024 B
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB
C語(yǔ)言數(shù)據(jù)類型
- 作為程序員, 我們最關(guān)心的是內(nèi)存中的動(dòng)態(tài)數(shù)據(jù),因?yàn)槲覀儗懙某绦蚓褪窃趦?nèi)存中運(yùn)行的
- 程序在運(yùn)行過(guò)程中會(huì)產(chǎn)生各種各樣的臨時(shí)數(shù)據(jù),為了方便數(shù)據(jù)的運(yùn)算和操作, C語(yǔ)言對(duì)這些數(shù)據(jù)進(jìn)行了分類, 提供了豐富的數(shù)據(jù)類型
- C語(yǔ)言中有4大類數(shù)據(jù)類型:基本類型撼嗓、構(gòu)造類型、指針類型欢唾、空類型
什么是常量?
- "量"表示數(shù)據(jù)且警。常量,則表示一些固定的數(shù)據(jù)礁遣,也就是不能改變的數(shù)據(jù)
- 就好比現(xiàn)實(shí)生活中生男生女一樣, 生下來(lái)是男孩永遠(yuǎn)都是男孩, 生下來(lái)是女孩就永遠(yuǎn)都是女孩, 所以性別就是現(xiàn)實(shí)生活中常量的一種體現(xiàn)
- 不要和江哥吹牛X說(shuō)你是泰國(guó)來(lái)的, 如果你真的來(lái)自泰國(guó), 我只能說(shuō)你贏了
常量的類型
-
整型常量
- 十進(jìn)制整數(shù)斑芜。例如:666,-120, 0
- 八進(jìn)制整數(shù),八進(jìn)制形式的常量都以0開(kāi)頭。例如:0123,也就是十進(jìn)制的83;-011,也就是十進(jìn) 制的-9
- 十六進(jìn)制整數(shù),十六進(jìn)制的常量都是以0x開(kāi)頭祟霍。例如:0x123,也就是十進(jìn)制的291
- 二進(jìn)制整數(shù),逢二進(jìn)一 0b開(kāi)頭杏头。例如: 0b0010,也就是十進(jìn)制的2
-
實(shí)型常量
- 小數(shù)形式
- 單精度小數(shù):以字母f或字母F結(jié)尾。例如:0.0f沸呐、1.01f
- 雙精度小數(shù):十進(jìn)制小數(shù)形式醇王。例如:3.14、 6.66
- 默認(rèn)就是雙精度
- 可以沒(méi)有整數(shù)位只有小數(shù)位崭添。例如: .3寓娩、 .6f
- 指數(shù)形式
- 以冪的形式表示, 以字母e或字母E后跟一個(gè)10為底的冪數(shù)
- 上過(guò)初中的都應(yīng)該知道科學(xué)計(jì)數(shù)法吧,指數(shù)形式的常量就是科學(xué)計(jì)數(shù)法的另一種表 示,比如123000,用科學(xué)計(jì)數(shù)法表示為1.23×10的5次方
- 用C語(yǔ)言表示就是1.23e5或1.23E5
- 字母e或字母E后面的指數(shù)必須為整數(shù)
- 字母e或字母E前后必須要有數(shù)字
- 字母e或字母E前后不能有空格
- 以冪的形式表示, 以字母e或字母E后跟一個(gè)10為底的冪數(shù)
- 小數(shù)形式
-
字符常量
- 字符型常量都是用''(單引號(hào))括起來(lái)的。例如:'a'呼渣、'b'棘伴、'c'
- 字符常量的單引號(hào)中只能有一個(gè)字符
- 特殊情況: 如果是轉(zhuǎn)義字符,單引號(hào)中可以有兩個(gè)字符。例如:'\n'屁置、'\t'
-
字符串常量
- 字符型常量都是用""(雙引號(hào))括起來(lái)的焊夸。例如:"a"、"abc"缰犁、"lnj"
- 系統(tǒng)會(huì)自動(dòng)在字符串常量的末尾加一個(gè)字符'\0'作為字符串結(jié)束標(biāo)志
-
自定義常量
- 后期講解內(nèi)容, 此處先不用了解
常量類型練習(xí)
123 | 1.1F | 1.1 | .3 | 'a' | "a" | "李南江" |
什么是變量?
- "量"表示數(shù)據(jù)淳地。變量,則表示一些不固定的數(shù)據(jù)帅容,也就是可以改變的數(shù)據(jù)
- 就好比現(xiàn)實(shí)生活中人的身高颇象、體重一樣, 隨著年齡的增長(zhǎng)會(huì)不斷發(fā)生改變, 所以身高、體重就是現(xiàn)實(shí)生活中變量的一種體現(xiàn)
- 就好比現(xiàn)實(shí)生活中超市的儲(chǔ)物格一樣, 同一個(gè)格子在不同時(shí)期不同人使用,格子中存儲(chǔ)的物品是可以變化的并徘。張三使用這個(gè)格子的時(shí)候里面放的可能是尿不濕, 但是李四使用這個(gè)格子的時(shí)候里面放的可能是面包
如何定義變量
- 格式1: 變量類型 變量名稱 ;
- 為什么要定義變量?
- 任何變量在使用之前遣钳,必須先進(jìn)行定義, 只有定義了變量才會(huì)分配存儲(chǔ)空間, 才有空間存儲(chǔ)數(shù)據(jù)
- 為什么要限定類型?
- 用來(lái)約束變量所存放數(shù)據(jù)的類型。一旦給變量指明了類型麦乞,那么這個(gè)變量就只能存儲(chǔ)這種類型的數(shù)據(jù)
- 內(nèi)存空間極其有限,不同類型的變量占用不同大小的存儲(chǔ)空間
- 為什么要指定變量名稱?
- 存儲(chǔ)數(shù)據(jù)的空間對(duì)于我們沒(méi)有任何意義, 我們需要的是空間中存儲(chǔ)的值
- 只有有了名稱, 我們才能獲取到空間中的值
- 為什么要定義變量?
int a;
float b;
char ch;
- 格式2:變量類型 變量名稱,變量名稱;
- 連續(xù)定義, 多個(gè)變量之間用逗號(hào)(,)號(hào)隔開(kāi)
int a,b,c;
- 變量名的命名的規(guī)范
- 變量名屬于標(biāo)識(shí)符,所以必須嚴(yán)格遵守標(biāo)識(shí)符的命名原則
如何使用變量蕴茴?
- 可以利用=號(hào)往變量里面存儲(chǔ)數(shù)據(jù)
- 在C語(yǔ)言中,利用=號(hào)往變量里面存儲(chǔ)數(shù)據(jù), 我們稱之為給變量賦值
int value;
value = 998; // 賦值
- 注意:
- 這里的=號(hào)劝评,并不是數(shù)學(xué)中的“相等”,而是C語(yǔ)言中的賦值運(yùn)算符倦淀,作用是將右邊的整型常量998賦值給左邊的整型變量value
- 賦值的時(shí)候,= 號(hào)的左側(cè)必須是變量 (10=b,錯(cuò)誤)
- 為了方便閱讀代碼, 習(xí)慣在 = 的兩側(cè) 各加上一個(gè) 空格
變量的初始化
- C語(yǔ)言中, 變量的第一次賦值蒋畜,我們稱為“初始化”
- 初始化的兩種形式
- 先定義,后初始化
int value; value = 998; // 初始化
- 定義時(shí)同時(shí)初始化
int a = 10; int b = 4, c = 2;
- 其它表現(xiàn)形式(不推薦)
int a, b = 10; //部分初始化
int c, d, e;
c = d = e =0;
- 不初始化里面存儲(chǔ)什么?
- 隨機(jī)數(shù)
- 上次程序分配的存儲(chǔ)空間,存數(shù)一些 內(nèi)容,“垃圾”
- 系統(tǒng)正在用的一些數(shù)據(jù)
如何修改變量值?
- 多次賦值即可
- 每次賦值都會(huì)覆蓋原來(lái)的值
int i = 10;
i = 20; // 修改變量的值
變量之間的值傳遞
- 可以將一個(gè)變量存儲(chǔ)的值賦值給另一個(gè)變量
int a = 10;
int b = a; // 相當(dāng)于把a(bǔ)中存儲(chǔ)的10拷貝了一份給b
如何查看變量的值?
- 使用printf輸出一個(gè)或多個(gè)變量的值
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語(yǔ)言中所有變量都有自己的作用域
- 變量定義的位置不同,其作用域也不同
- 按照作用域的范圍可分為兩種, 即局部變量和全局變量
- 局部變量
- 局部變量也稱為內(nèi)部變量
- 局部變量是在代碼塊內(nèi)定義的, 其作用域僅限于代碼塊內(nèi), 離開(kāi)該代碼塊后無(wú)法使用
int main(){
int i = 998; // 作用域開(kāi)始
return 0;// 作用域結(jié)束
}
int main(){
{
int i = 998; // 作用域開(kāi)始
}// 作用域結(jié)束
printf("i = %d\n", i); // 不能使用
return 0;
}
int main(){
{
{
int i = 998;// 作用域開(kāi)始
}// 作用域結(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;
}
- 注意點(diǎn):
- 同一作用域范圍內(nèi)不能有相同名稱的變量
int main(){
int i = 998; // 作用域開(kāi)始
int i = 666; // 報(bào)錯(cuò), 重復(fù)定義
return 0;
}// 作用域結(jié)束
int i = 666;
int i = 998; // 報(bào)錯(cuò), 重復(fù)定義
int main(){
return 0;
}
- 不同作用域范圍內(nèi)可以有相同名稱的變量
int i = 666;
int main(){
int i = 998; // 不會(huì)報(bào)錯(cuò)
return 0;
}
int main(){
int i = 998; // 不會(huì)報(bào)錯(cuò)
return 0;
}
int call(){
int i = 666; // 不會(huì)報(bào)錯(cuò)
return 0;
}
變量?jī)?nèi)存分析(簡(jiǎn)單版)
-
字節(jié)和地址
- 為了更好地理解變量在內(nèi)存中的存儲(chǔ)細(xì)節(jié),先來(lái)認(rèn)識(shí)一下內(nèi)存中的“字節(jié)”和“地址”
- 每一個(gè)小格子代表一個(gè)字節(jié)
- 每個(gè)字節(jié)都有自己的內(nèi)存地址
- 內(nèi)存地址是連續(xù)的
-
變量存儲(chǔ)占用的空間
- 一個(gè)變量所占用的存儲(chǔ)空間撞叽,和定義變量時(shí)聲明的類型以及當(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 |
- 變量存儲(chǔ)的過(guò)程
- 根據(jù)定義變量時(shí)聲明的類型和當(dāng)前編譯環(huán)境確定需要開(kāi)辟多大存儲(chǔ)空間
- 在內(nèi)存中開(kāi)辟一塊存儲(chǔ)空間姻成,開(kāi)辟時(shí)從內(nèi)存地址大的開(kāi)始開(kāi)辟(內(nèi)存尋址從大到小)
- 將數(shù)據(jù)保存到已經(jīng)開(kāi)辟好的對(duì)應(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 }
先不要著急, 剛開(kāi)始接觸C語(yǔ)言, 我先了解這么多就夠了. 后面會(huì)再次更深入的講解存儲(chǔ)的各種細(xì)節(jié)