C语言:随笔3
數(shù)組:是具有相同類型的數(shù)據(jù)組成的序列,是有序集合。(他在內(nèi)存中的分布是從低地址到高地址的,是一個(gè)個(gè)挨著來存儲(chǔ)的,所以說是有序的集合而不是里邊的內(nèi)容是有序的)
1、一維數(shù)組定義:
類型說明符 數(shù)組名[常量表達(dá)式]
PS:一維數(shù)組在內(nèi)存中的存放。(任何程序包括操作系統(tǒng)在運(yùn)行的時(shí)候,都要加載進(jìn)內(nèi)存而不是在硬盤上運(yùn)行的,在硬盤上是不可能運(yùn)行的,CPU是從內(nèi)存上調(diào)數(shù)據(jù),內(nèi)存再從硬盤上取數(shù)據(jù),這樣一個(gè)動(dòng)態(tài)的過程,所以你一個(gè)東西要運(yùn)行,要在CPU里運(yùn)行是在內(nèi)存中的,任何程序一運(yùn)行他就加載到內(nèi)存中了,所以呢,例如說你要想盜什么密碼之類的,你應(yīng)該從內(nèi)存去入手,因?yàn)樗木幾g整個(gè)過程都是在內(nèi)存中運(yùn)行的)
| 低地址 | 86 | mark[0] |
| ? | 92 | mark[1] |
| ? | 77 | mark[2] |
| ? | 52 | mark[3] |
| ? | ... | ... |
| 高地址 | 94 | mark[99] |
數(shù)組名其實(shí)就是這個(gè)數(shù)組第一個(gè)元素的首地址。
2、二維數(shù)組定義的一般形式為:
類型說明符 數(shù)組名 [常量表達(dá)式] [常量表達(dá)式]
二維數(shù)組在概念是二維的,但是實(shí)際的硬件存儲(chǔ)器卻是連續(xù)編址,也就是說存儲(chǔ)器單元是按一維線性單元排列的。如何在一維存儲(chǔ)器中存放二維數(shù)組,可有兩種方式:一種是按行排列,即放完一行之后順次放入第二行。另一種是按列排列,即放完一列之后再順次放入第二列,在C語言中,二維數(shù)組是按行排列的。
數(shù)組在編譯時(shí)就要說明所占的空間有多少(就是那個(gè)常量表達(dá)式)。賦值是在運(yùn)行的時(shí)候賦值的。
用宏定義注釋掉一段語句,讓他不執(zhí)行:
#if(0)語句1;//語句1永遠(yuǎn)不會(huì)被編譯,因?yàn)閕f后邊是0,為假跳過。
#endif
3、程序在編譯運(yùn)行時(shí)普通的變量是存放在堆棧區(qū)的,棧區(qū)的;而static會(huì)使得普通的變量存放在數(shù)據(jù)區(qū)也就是data區(qū),data區(qū)一般是不能改變的,像常量,字符串一般都是在data區(qū)。
PS:無論你是什么語言,在內(nèi)存中他一般都是這樣的,我們整個(gè)內(nèi)存主要分為四大區(qū):
1):CODE(代碼區(qū))
2):DATA(數(shù)據(jù)區(qū))(存放常量,字符串以及用static定義的變量)(數(shù)據(jù)區(qū)的特點(diǎn)不會(huì)因?yàn)檫@個(gè)函數(shù)的退出,而使定義的變量消失)(DATA區(qū)是在整個(gè)程序退出他才會(huì)釋放)
3):STACK(棧區(qū))(我們?nèi)魏我粋€(gè)程序要運(yùn)行的化,他都會(huì)把一些數(shù)據(jù)或者這個(gè)函數(shù)要調(diào)用的一些變量推進(jìn)這個(gè)棧里面,再后在進(jìn)行運(yùn)行,之后等這個(gè)函數(shù)調(diào)用完之后就會(huì)把這個(gè)棧給釋放,要不然你的內(nèi)存是遠(yuǎn)遠(yuǎn)不夠用的)
4):HEAP區(qū)(像STACK區(qū)是由程序自己釋放和生成的,而HEAP區(qū)不同,HEAP區(qū)的分配大小是由程序員自己規(guī)定的,你規(guī)定他多大就是多大,當(dāng)然你不能超出它的范圍,)
要了解一下這四個(gè)分區(qū)。。。。。
總結(jié)