1.CPU(數(shù)據(jù)處理器)、內(nèi)存條、硬盤、顯卡、主板、顯示器之間的關(guān)系。
? ? ? ? 舉個(gè)最簡(jiǎn)單的例子,比如在電腦上放電影,鼠標(biāo)雙擊(操作系統(tǒng))使存放在硬盤的視頻數(shù)據(jù)被操作系統(tǒng)調(diào)用到內(nèi)存條(因?yàn)镃PU不能直接處理硬盤上的數(shù)據(jù)),然后CPU去處理內(nèi)存條中的數(shù)據(jù),并將其中一些數(shù)據(jù)變成圖像,一些數(shù)據(jù)變成聲音。圖像最終通過(guò)顯卡在顯示器顯示;聲音最終通過(guò)聲卡發(fā)出聲音。而主板的作用是提供了一個(gè)傳輸?shù)脑O(shè)備(因?yàn)镃PU、內(nèi)存條、硬盤、顯卡都插在主板上)。
2.HelloWorld程序如何運(yùn)行起來(lái)的?
#include
int main(void)
{
? ? ? printf("HelloWord!\n");
? ? ? return 0;
}
? ? ? ? ?首先通過(guò)軟件的編譯和鏈接會(huì)生成一個(gè)xxx.exe的可執(zhí)行文件;然后點(diǎn)擊 “!” 按鈕會(huì)請(qǐng)求操作系統(tǒng)去去執(zhí)行這個(gè)文件;最后操作糸統(tǒng)會(huì)調(diào)用CPU去執(zhí)行并把結(jié)果顯示到顯示器上。(Windows98可直接訪問(wèn)硬件但從2000 XP開(kāi)始之后就不能直接訪問(wèn)了)
3.什么是數(shù)據(jù)類型
一、基本數(shù)據(jù)類型
1.整數(shù)
? ? 整型 int ? 占4字節(jié)
#include
int main(void)
{
int i = 10;? ?//將10放進(jìn)變量i里面,表示i變量是整型變量,所謂整型變量表示i只能存放整數(shù),不能存放實(shí)數(shù)
printf ("%d\n",i);
return 0;
}
? ? ? 若上述代碼 int i = 10.5,則有一個(gè)警告,雖不會(huì)報(bào)錯(cuò)但結(jié)果為10,會(huì)丟失數(shù)據(jù)(java則報(bào)錯(cuò))
? ? 短整型 short int ? 占2字節(jié)
? ? 長(zhǎng)整型 long int? ? 占8字節(jié)
2.浮點(diǎn)數(shù)【實(shí)數(shù)】
? ? 單精度浮點(diǎn)數(shù) float ?占4字節(jié)? ? ?如3.3,若此時(shí)用double會(huì)浪費(fèi)內(nèi)存。
? ? 雙精度浮點(diǎn)數(shù) double ?占8字節(jié)
3.字符 ?char
單個(gè)字符 char ?占1個(gè)字節(jié)
如:
#include
int main(void)
{
char i = 'M';
printf ("%c\n",i);
return 0;
}
? ? 字符串(一系列字符組合)C語(yǔ)言中沒(méi)有這樣一個(gè)數(shù)據(jù)類型保存字符串的,會(huì)用其他方式,后面介紹。
二、復(fù)合類型數(shù)據(jù)
? ? 所謂復(fù)合類型數(shù)據(jù)就是把基本類型拼湊在一起的數(shù)據(jù)類型。包括:
? ? ? ?1.結(jié)構(gòu)體
? ? ? ?2.枚舉 (重點(diǎn),具體后續(xù)介紹)
? ? ? ?3.共用體*
4.什么是變量
例:
#include
int main(void)
{
int i; ? //i是變量
i= 3;//將3放進(jìn)變量i里面。3最終是存放在內(nèi)存中,程序終止之后,3所在的空間被釋放掉。空間釋放是指該空間可以被另外的程序使用,而不是該空間不存在。
printf ("i = %d\n",i);//輸出i
return 0;
}
? ? 其中int i; i=3;究竟是如何運(yùn)行的呢?
? ? ? ? 當(dāng)運(yùn)行int i;時(shí)會(huì)請(qǐng)求操作系統(tǒng),操作系統(tǒng)會(huì)去內(nèi)存條(內(nèi)存條中很多存儲(chǔ)的格子,即存儲(chǔ)單元)中找到一個(gè)空閑的格子(存儲(chǔ)單元)并把這個(gè)格子和字母i產(chǎn)生一定的關(guān)聯(lián),相當(dāng)于把這個(gè)存儲(chǔ)單元當(dāng)做變量i使用。而運(yùn)行i = 3;就相當(dāng)于把3存儲(chǔ)進(jìn)i所對(duì)應(yīng)的存儲(chǔ)單元。最終結(jié)果就是內(nèi)存條的存儲(chǔ)單元中放進(jìn)3。
? ? 那么為什么要使用變量呢?
? ? ? ? 若不使用則需要自己去內(nèi)存條中找存儲(chǔ)單元,很麻煩。而變量可以自己去找。簡(jiǎn)單來(lái)說(shuō),變量就是一個(gè)字母去對(duì)應(yīng)內(nèi)存條中的一個(gè)存儲(chǔ)單元。變量的本質(zhì)就是內(nèi)存中的一段存儲(chǔ)空間。
5.CPU 、內(nèi)存條 、VC++6.0、 操作系統(tǒng)之間的關(guān)系
? ? 程序在軟件寫(xiě)好后,軟件通過(guò)編譯和鏈接請(qǐng)求操作系統(tǒng)在內(nèi)存條里面找到空閑空間(存儲(chǔ)單元)并把該空間與變量 i 產(chǎn)生關(guān)聯(lián),之后所使用的變量 i 實(shí)際上就是使用的內(nèi)存條上變量i所對(duì)應(yīng)的存儲(chǔ)空間。
6.變量為什么初始化 (重點(diǎn))
所謂初始化就是賦值的意思!?。?/p>
例下述代碼未賦值:
#include
int main(void)
{
int i;
printf ("i = %d\n", i);
return i;
} ?//此程序只定義了變量i,并沒(méi)有初始化變量(賦值)。結(jié)果i的值一直是-858993460
? ? ? ? 原因:VC++軟件如果發(fā)現(xiàn)一個(gè)變量里面是垃圾值(變量沒(méi)有賦初值)會(huì)自動(dòng)放一個(gè)添充字-858993460。(添充字的好處:可以檢測(cè)變量是否被初始化) ?因此變量一定要進(jìn)行初始化?。?!
? ? ?重啟能解決大多數(shù)問(wèn)題是因?yàn)橹貑⒖梢允箖?nèi)存條的存儲(chǔ)單元都變成00...0。(硬件設(shè)備存儲(chǔ)01代碼)
? ? 軟件與內(nèi)存之間的關(guān)系:? ? 內(nèi)存是在操作系統(tǒng)的統(tǒng)一管理下使用的!
? ? ? ? 1.軟件在運(yùn)行前需要向操作系統(tǒng)申請(qǐng)存儲(chǔ)空間,在內(nèi)存空閑空間足夠時(shí),操作系統(tǒng)將分配一段內(nèi)存空間并將外存中軟件拷貝一份存入該內(nèi)存空間中,并啟動(dòng)該軟件的運(yùn)行。
? ? ? ?2.在軟件運(yùn)行期間,該軟件所占用內(nèi)存空間不再分配給其他軟件。
? ? ? 3.當(dāng)軟件運(yùn)行完畢后,操作系統(tǒng)將回收該內(nèi)存空間(注意:操作系統(tǒng)并不清空該內(nèi)存空間中遺留下來(lái)的數(shù)據(jù)),以便再次分配給其他軟件使用。
? ? ?綜上所述,一個(gè)軟件所分配到的空間中及可能存在著以前其他軟件使用過(guò)后的殘留數(shù)據(jù),即為垃圾數(shù)據(jù)。所以需要對(duì)變量初始化,即對(duì)該內(nèi)存空間初始化。
7.如何定義變量
? ? 數(shù)據(jù)類型 變量名 = 要賦的值;
? ? 等價(jià)于
? ? 數(shù)據(jù)類型 變量名;
? ? 變量名 = 要賦的值;
如 int i = 3;
等價(jià)于
int i;
i = 3;
int i, j;等價(jià)于int i; int j;
int i, j;
i=j=5;
等價(jià)于
int i, j;
i = 5;
j = 5;
8.什么是進(jìn)制
? ?十進(jìn)制就是逢十進(jìn)一;二進(jìn)制就是逢二進(jìn)一;八進(jìn)制就是逢八進(jìn)一;十六進(jìn)制就是逢十六進(jìn)一。規(guī)定:八進(jìn)制前要加數(shù)字0;十六進(jìn)之前要加0x或0X。
? ? 十進(jìn)制基數(shù):0123456789
? ? 二進(jìn)制基數(shù):01
? ? 八進(jìn)制基數(shù):01234567 ?注意:八進(jìn)制里面沒(méi)有數(shù)字8
? ? 十六進(jìn)制基數(shù):0123456789ABCDEF
進(jìn)制轉(zhuǎn)換小程序:
#include
int mian(void)
{
int i = 88;
printf("i = %d\n", i) ?// %d表示十進(jìn)制輸出;%x或%X表示十六進(jìn)制輸出;%o表示八進(jìn)制輸出。
return=0;
}
? ? ? 問(wèn)題:十進(jìn)制的5和二進(jìn)制的101表示的是同一個(gè)數(shù)嗎?
? ? ? ?本質(zhì)上是一樣的,只是表示方式不一樣。
注: 匯編語(yǔ)言中,二進(jìn)制數(shù)字加B;八進(jìn)制數(shù)字加O;十進(jìn)制數(shù)字加D;十六進(jìn)制加H。這些均可以用小括號(hào)加數(shù)字下標(biāo)。
9.常量在C語(yǔ)言中是如何表示的
? ?常量就是不變的數(shù)
整數(shù)
十進(jìn)制:傳統(tǒng)寫(xiě)法
十六進(jìn)制:前面加0X或0x
八進(jìn)制:前面加數(shù)字0 ?。?!
浮點(diǎn)數(shù)
傳統(tǒng)的寫(xiě)法 ? float x = 3.2;
科學(xué)計(jì)數(shù)法 ?float x = 3.2e-2; 表示0.032;
小程序:
#include
int main(void)
{
int i = 3.2e-2F; //3.2e-2默認(rèn)double類型,可在后面加F(float)避免警告。
printf("%f\n", x)
return 0;
}
字符
? ? 單個(gè)字符用單引號(hào)括起來(lái):'A' 表示字符A。
? ? ?'AB'表示錯(cuò)誤;"AB"表示正確。
? ? ?字符串用雙引號(hào)括起來(lái)
注意:"A"也表示正確,它代表了'A' '\0'的組合。
10.常量以什么樣的二進(jìn)制代碼存儲(chǔ)在計(jì)算機(jī)的
編碼
int i = 86;
整數(shù)是以補(bǔ)碼的形式轉(zhuǎn)化為二進(jìn)制代碼存儲(chǔ)在計(jì)算機(jī)中的;
實(shí)數(shù)是以IEEE754轉(zhuǎn)化為二進(jìn)制代碼存儲(chǔ)在計(jì)算機(jī)中的。(具體后續(xù)介紹)