指標與陣列

2021-06-16 22:55:05 字數 1031 閱讀 6826

由於陣列與指標在使用時、作為函式引數的時候可以互換,很容易引起混淆, 其實陣列和指標絕大多數情況下都不一致。

先把問題丟擲來, 看如下示例**

int test_arry = ;

// main.c

extern int *test_arry;

int main(void)

該示例**輸出的結果為1234,本不是輸出陣列的首位址。可以得出兩都並不一致。

分析, extern宣告test_arry是乙個外部變數, 說明在其它的位址有定義。然而在test.c中test_arry定義為整型陣列,在main.c中定義為整型指標。宣告外部變數時會編譯器以外部變數宣告時的型別來操作,外部變數對於不同的型別賦值方式也不同, 基本資料型別、資料都將是同一位址,指標會指向同一位址。指標的賦值方式如下。

int a = 10;   //假設a的位址為1234

int *p1 = &a; //p1 的值為1234

int *p2 = p1; //p1 p2都為1234

所以main.c中的test_arry中存放的值就是test.c中test_arry四個位元組的值(0x1234)。 個人的理解,不知的描述的清不清楚啊, 有什麼不對的地方希望提出來, 謝謝。

從取值來分析兩者的區別

char str = "abcdefg";

int main(void)

該示例**的輸出結果大家都知道,都為b,從輸出結果和**的表現形式上看都是一樣的。但其背後的執行並不一樣

陣列str[1]的訪問會轉換為指標訪問,假設str 的位址為1234, 取下標的值+1234 (1234+1 ) -> 再取相加後位址上的內容(*1235)。

指標pstr[1],假設pstr的位址為5678,先叢位址5678上面取值1234,再取下標的值+1234 (1234+1) ->再取相加後位址上的內容(*1235)。

指標與陣列,指標陣列 陣列指標

int a 10 print n a p,a p a,a print n a 1 p,a 1 p a 1,a 1 a做乙個指標,步長為4,指向乙個元素,a做乙個指標,步長為40,指向乙個維陣列 int b 3 4 print n b p,b p,b p b,b,b print n b 1 p,b 1...

指標陣列與陣列指標

1.指標陣列 指標陣列中每乙個元素都是乙個指標,也既是存放字串的首位址。所以指標陣列適合處理若干個長度不等的字串。定義的一般形式為 型別說明符 指標陣列名 陣列長度 例如 int p 3 宣告乙個陣列,指標陣列p,由3個int型別指標變數元素組成 從運算子的優先順序分析,由於 的優先順序大於 所以p...

指標陣列與陣列指標

呵呵,實在是厭倦了繞口的解釋。指標陣列,故名思義,就是指標的陣列,陣列的元素是指標 陣列指標,同樣,就是直想陣列的指標。簡單舉例說明 int p 2 首先宣告了乙個陣列,陣列的元素是int型的指標。int p 2 宣告了乙個指標,指向了乙個有兩個int元素的陣列。其實這兩種寫法主要是因為運算子的優先...