指標的運算本身就是適合對連續的資料進行處理,而陣列正好滿足這一要求。所以這一節研究如何使用指標訪問陣列元素。
首先我們舉個例子
int a[10]
,*p;
//定義乙個陣列和乙個指標變數p
p=a;
//或者p=&a[0];這兩句話的意思都是將陣列a的首位址賦值給p
等效形式
*p就是a[0],是定址運算子,就是找到p變數中儲存的位址裡面的內容,即陣列a的第乙個元素。
同理(p+i)就是找到對應陣列中的第i個元素a[i]。
與此同時 *(a+i)和p[i]也都代表相同的含義。
總結一下便是 *(指標+i) = *(陣列名+i) = 陣列名[i] = 指標變數名[i]
陣列名a是陣列的首位址,是乙個常量,所以不能進行自加自減運算。
陣列的每個元素都是指標變數,這個陣列就是指標陣列。
語法形式
資料型別 *陣列名[下標表示式];
下標表示式指出陣列元素的個數,資料型別表示指標的型別,陣列名是指標陣列的名稱也是陣列的首位址。
例例用指標陣列輸出單位矩陣
#include
using
namespace std;
intmain()
;int line2=
;int line3=
;int
* pline[3]
=;for(
int i =
0; i <
3; i++
)return0;
}
將三個一維陣列的陣列名作為指標陣列的元素,完成了指標陣列的初始化,每個元素分別指向矩陣的一行。
pline[i][j]並不是二維陣列而是一維指標陣列,前面的pline[i]是指標名,後面的[j]就是對應的元素。(具體看上面的等價方式)。在記憶體中的儲存方式也是不相同的二維陣列的元素在記憶體中是連續的一行接一行,而指標陣列在記憶體中是每行的元素是連續的,但是行與行之間沒有關係。
雖然二維陣列和指標陣列存在本質的差異,但是還是可以通過指標陣列對二維陣列進行訪問。
例 二維陣列舉例
#include
using
namespace std;
intmain()
,,};
for(
int i =
0; i <
3; i++
)return0;
}
通過陣列元素的位址可以輸出二維陣列元素,使用*(*(arry2+i)+j)
這就是arry2陣列的第i行第j列元素,對應下標是arry2[i][j]. c 學習筆記 六 陣列指標
這是最有可能的,讀者有可能不理解本章內容直到學相關c 指標的章節學習。因此,假如有c 指標位的理解,那麼陣列名是乙個常量指標陣列的第乙個元素。因此,在宣告 double balance 50 double p double balance 10 p balance 它是合法的使用陣列名作為常量指標,...
C語言學習筆記 指標 指標陣列與陣列指標
指標陣列 是乙個陣列,陣列元素為指標 陣列指標 是乙個指標,指向陣列的指標 例如 int p1 5 int p2 5 對於語句int p1 5 因為 的優先順序要比 要高,所以 p1 先與 結合,構成乙個陣列的定義,陣列名為 p1,而 int 修飾的是陣列的內容,即陣列的每個元素。也就是說,該陣列包...
C 學習筆記(3,4章)
第三章 3.1 變數 符號常量 預處理器方式 在c 編譯過程中,首先將源 傳遞給預處理器。在這裡 define和 include一樣,也是乙個預處理器編譯指令。該編譯指令告訴預處理器,在程式中查詢inf,並將程式中所有的inf替換成為1e9。完成這項操作之後再替換。3.2 const const的好...