C語(yǔ)言編程預(yù)備知識(shí)(一)

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ù)介紹)


同步更新至:C語(yǔ)言編程預(yù)備知識(shí)(一)_comer_liu的博客-CSDN博客

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

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

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