一維陣列中 a[i] 中的 a 代表了本陣列的首位址,相當於 &a[0]。因此 *a 就等於 a[0]。那麼對 a 加 1,就可以訪問下一位:*(a+1) 就等於 a[1]。
訪問一維陣列的元素:a[i] = *(a+i);
假設有 a[2][2] 這樣乙個二維陣列,可以這麼理解它:a 由 a[0],a[1],a[2] 構成,而 a[0] 又由 a[0][0],a[0][1],a[0][2] 構成,a[1] 由 a[1][0],a[1][1],a[1][2] 構成,a[2] 由 a[2][0],a[2][1],a[2][2] 構成。
1. a 由 a[0],a[1],a[2] 構成,而 a[0] 又由 a[0][1],a[0][1],a[0][2] 構成;
兩個一維陣列構成了乙個二維陣列。a 是乙個二維陣列,a[i] 是乙個一維陣列。既然 a[i] 是乙個陣列,那麼陣列名就是這個陣列的首位址。比如,a[0] 就等同於 &a[0][0]。
2. a 是乙個陣列名,它有三個元素:a[0],a[1],a[2];* a 等於 a[0],*(a + 1) 等於 a[1],*( a + 2 )等於 a[2];a[0], a[1], a[2] 又都是各個一維陣列的首位址。比如 a[0] 就等同於 &a[0][0],就是說 *a[0] = a[0][0]。
再結合上面的 *a 等於 a[0],可以得出:**a 等於 a[0][0]。
以a[2][2]為例,則指標與陣列的等價關係為:
3.簡單記之,二維陣列 a[i][j] 中的 a[i] 是乙個一維陣列名,也就是乙個位址量。
訪問二維陣列的各個元素:a[i][j] = *(a[i] + j) = *(*(a+i)+j)
通常對字串的處理,傳入的的引數都是字串的首位址,也就是字串名。
比如:
char s[80]; // 定義乙個長度為 80 的字串 s
char t[80]; // 定義乙個長度為 80 的字串 t
gets (s); // 讀入乙個字串
puts (s); // 輸出乙個字串
strcpy (s, t); // 將字串 t 拷貝到 字串 s 中
其中的 s 都是該字串的首位址。
那相對於二維陣列而言,
char *s = "i", "love", "you"};
//輸出"love"
puts (s[1]); //字串形式 - s[1]是乙個位址量,代表"love",為"love"字串的首位址
puts (*(s+1)); //指標形式
[1] 二維陣列、指標陣列、字串二維陣列 -
文之
一維陣列與二維陣列
1.一維陣列的定義格式為 型別說明符 陣列名 常量表示式 在定義陣列時,需要指定陣列中元素的個數,方括弧中的常量表示式用來表示元素的個數,即陣列長度。常量表示式中可以包括常量和符號常量,但不能包含變數。c語言不允許對陣列的大小作動態定義,即陣列的大小不依賴於程式執行過程中變數的值。在定義陣列時對陣列...
陣列(一維陣列 二維陣列)
陣列概述 c 陣列從零開始建立索引,即陣列索引從零開始。c 中陣列的工作方式與在大多數其他流行語言中的工作方式類似。但還有一些差異應引起注意。這些其實和泛型有些類似,陣列的操作沒有泛型方便,但是效能卻不是泛型所能比擬的 宣告陣列時,方括號 必須跟在型別後面,而不是識別符號後面。在c 中,將方括號放在...
一維陣列,二維陣列與指標
陣列與指標間的三條規則 陣列名是指向陣列首元素的指標。e相當於給e公升了一階。int a 4 a 0 本身是乙個值,a 0 是乙個位址,公升階大概就是這個意思 e相當於給e降了一階。降階相當於把乙個指標降為值,a 0 是乙個位址,a 0 就成為了值 以上內容來自北京大學 c程式設計高階 一維陣列與指...