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