1. 程式人生 > >第十章——陣列和指標

第十章——陣列和指標

陣列初始化 當初始化列表中的值少於陣列元素個數時,編譯器會把剩餘的元素都初始化為0;個數多於陣列元素個數時,會視為錯誤

省略陣列中括號中的數字,編譯器會根據初始化列表中的專案來確定陣列的大小。

days是陣列 sizeof days是整個陣列的大小 sizeof day[0]是陣列中一個元素的大小

c不允許把陣列作為一個單元賦給另一個數組,除了初始化外也不允許使用花括號列表的形式賦值

使用越界的陣列下標會導致程式改變其他變數的值

c99之前,陣列大小的定義只能在方括號中使用整型常量表達式

多維陣列 float rain[5][12]//一個內含12個float型別元素的陣列 int bos[10][20][30]//box內含10個元素,每個元素是內含20個元素的陣列,這20個元素的陣列中的每個元素是內含30個元素的陣列

初始化多維陣列 { {4,3,1,2}, {5,6,7},//後面一個元素被初始化為0 {1,2,3,4} };

陣列名是陣列首元素的地址 dates+2==&dates[2]//相同的地址 *(dates+2)==dateds[2]//相同的值

函式傳入陣列 可以把陣列大小作為第二個引數 int sum(int *ar,int n) int sum(int a[],int n) 在函式原型中可以省略陣列名,在定義中不能省略引數名

指標求差:求差的兩個指標分別指向同一個陣列的不同元素,通過計算求出兩元素之間的距離。差值的單位與陣列型別的單位相同 不要解引用未初始化的指標,因為在建立一個指標的時候,系統只分配了儲存指標本身的記憶體,並未分配儲存資料的記憶體,因此,在使用指標之前,必須先用已分配的地址初始化它

const int sum(const int ar[],int n)//const並不是要求原陣列是常量,而是該函式在處理陣列時將其視為常量,不可更改。 const double *pd=rates;//指向const的指標不能用於改變值 把const資料或非const資料的地址初始化為指向const的指標或為其賦值是合法的 double *const pc=rates;//宣告並初始化一個不能指向別處的指標 const double *const pc=retes;//該指標不能更改它所指向的地址,也不能修改指向地址上的值

指標和多維陣列 int zippo[4][2]; zippo//二維陣列首元素的地址(每個元素內含兩個Int型別元素的一維陣列,與zippo[0]的區別是,zippo是一個佔用兩個int大小物件的地址,zippo[0]是一個佔用一個int大小物件的地址,但是值是相同的) zippo+2//二維陣列的第三個元素(即一維陣列)的地址 *(zippo+2)//二維陣列的第三個元素(一維陣列)的首元素(一個int型別的值)地址 *(zippo+2)+1//二維陣列的第3個元素的第2個元素地址 (

(zippo+2)+1)//二維陣列的第三個一維陣列元素的第2個int型別元素的值,即zippo[2][1] *zippo與&zippo[0][0]等價

指向多維陣列的指標 int (*pz)[2];//pz指向一個內含兩個Int型別的陣列 宣告一個指向N維陣列的指標時,只能省略最左邊方括號中的值int sum2(int ar[][12][20][30],int rows);

變長陣列 允許使用變量表示陣列的維度 int quarters=4; int regions=5; double sales[regions][quarters]; 變長陣列必須是自動儲存類別,而且不能在宣告中初始化它們。 int sum(int rows,int cols,int ar[rows][cols])