第十章 陣列與指標( C primer plus)

2021-10-14 09:27:06 字數 1683 閱讀 7352

0.陣列長度建議定義為巨集。由於編譯器不檢查陣列下標的合法性,這樣可減少下標越界錯誤。

1.唯讀陣列宣告最前面加const,且必須同時初始化。

2.陣列屬於自動儲存類,陣列元素的值不初始化時是不定的;部分初始化,後面預設為0;多初始化出錯。

3.可以讓陣列長度空著,由編譯器根據初始化的數值的個數確定陣列大小。獲取陣列長度方法:int a;length=sizeof(a)/sizeof(a[0]);缺點:初始化的元素個數有誤時,不易發現。

4.c99特性:int a[4]=; 結果:a[0]=0//多次初始化以最後一次為準 a[2]=2,a[3]=3//可單獨對某元素或某一塊初始化

5.陣列長度必須是整數常量表示式。如int a[3*2+1];int b[sizeof(int)];int c[(int) 3.1];

6.一維陣列與指標的關係:int a[10];//a==&a[0];a+i==&a[i];*(a+i)==a[i];a+i指標後移i個int所佔記憶體長度。陣列名是指標常量,p++中p必須是變數。

7.函式定義時:形參int *p==int p,後者作為形參時,p是指向int型別的指標,一般佔四個位元組。

8.指標主要操作:自增自減,指標加減整數,指向同乙個陣列的指標可做差,同型別指標可比大小。注意:int a[3];int * p=a;p+3有效,*(p+3)非法

9.int * p;*p=3非法。不能對未初始化的指標取值。此時p是隨機的,不知道3會存在**。

10.定義和宣告不修改陣列內容的函式用const:int sum(const int a,int a)。而int sub(const int *p)表明函式不會用p來修改資料。

11.const比#define好在:還可以用const建立陣列常量,指標常量,以及指向常量的指標。

12.指標賦值規則:常量或非常量的位址都可以賦給指向常量的指標(const在*前);只有非常量的位址才可以賦給普通指標(都不帶const)。即一般(無const)可轉特殊(有const),反之不可。

13.const與指標:星前定資料,星後定指標。即const在星號前資料不能改變,const在星號後指標指向不能變。即const int * p==int const * p//p指向的資料不能改變。int * const p//p的指向不能改變。const int *const p//都不能改變

14.二維陣列與指標

(1)兩者關係:int a[2][3];//a==&a[0],a[0]==&a[0][0],a所指物件大小是三個int,而a[0]所指物件是乙個int。*a==a[0]==&a[0][0],*(a[0])==a[0][0]==**a。*與&互為逆運算。

(2)指向多維陣列的指標:int a [2][3]; int (* p)[2];//p指向乙個含2個int的陣列;p=a,則p[m][n]==*(*(p+m)+n);int * p[2];//定義了含兩個指標元素的陣列

15.二維陣列做函式引數,需要傳遞:(1).傳列數(固定):int (*p)[3]===int a[3];//僅作為函式形參時後者等於前者(2).傳行數(可變)。也說明列數相同的陣列可以集中處理。高維陣列類似。

第十章 陣列和指標

陣列初始化 當初始化列表中的值少於陣列元素個數時,編譯器會把剩餘的元素都初始化為0 個數多於陣列元素個數時,會視為錯誤 省略陣列中括號中的數字,編譯器會根據初始化列表中的專案來確定陣列的大小。days是陣列 sizeof days是整個陣列的大小 sizeof day 0 是陣列中乙個元素的大小 c...

C Primer Plus 第十章 陣列和指標

int sum int ar,int n intsum int int intsum int ar,int n intsum int int 指標減去乙個整數 指標必須是第乙個運算物件 相加的逆操作。遞減指標 逆操作遞增 指標求差 可以計算兩個指標的差值。通常,求差的兩個指標分別指向同乙個陣列的不同...

第十章 Lua陣列

1.一維陣列 array for i 0,2 do print array i end執行結果 nil lua tutorial正如你所看到的,我們可以使用整數索引來訪問陣列元素,如果知道的索引沒有值則返回nil。在 lua 索引值是以 1 為起始,但你也可以指定 0 開始。除此外我們還可以以負數為...