陣列 指標(1)

2021-10-22 01:30:36 字數 1187 閱讀 8027

a

a[0]

&a&a[0]

前提是 int a[10]

1.a就是陣列名。a做右值表示陣列首元素(陣列的第0個元素,也就是a[0])的首位址(首位址就是起始位址,就是4個位元組中最開始第乙個位元組的位址)。a做右值等同於&a[0];

(2)a[0]表示陣列的首元素,也就是陣列的第0個元素。做左值時表示陣列第0個元素對應的記憶體空間(連續4位元組);做右值時表示陣列第0個元素的值(也就是陣列第0個元素對應的記憶體空間中儲存的那個數)

(3)&a就是陣列名a取位址,字面意思來看就應該是陣列的位址。&a不能做左值(&a實質是乙個常量,不是變數因此不能賦值,所以自然不能做左值。);&a做右值時表示整個陣列的首位址。

(4)&a[0]字面意思就是陣列第0個元素的首位址(搞清楚和&的優先順序,的優先順序要高於&,所以a先和結合再取位址)。做左值時表示陣列首元素對應的記憶體空間,做右值時表示陣列首元素的值(也就是陣列首元素對應的記憶體空間中儲存的那個數值)。做右值時&a[0]等同於a。

總結:1:&a和a做右值時的區別:&a是整個陣列的首位址,而a是陣列首元素的首位址。這兩個在數字上是相等的,但是意義不相同。意義不相同會導致他們在參與運算的時候有不同的表現。

2:a和&a[0]做右值時意義和數值完全相同,完全可以互相替代。

3:&a是常量,不能做左值。

4:a做左值代表整個陣列所有空間,所以a不能做左值。

int a[5]

=;printf

("a[3] = %d.\n"

, a[3]

);printf

("*(a+3) = %d.\n",*

(a+3))

;// 等效於:int b = *(a+3); printf("*(a+3) = %d.\n", b);

int*p;

p = a;

// a做右值表示陣列首元素首位址,等同於&a[0]

printf

("*(p+3) = %d.\n",*

(p+3))

;// 等同於a[3]

printf

("*(p-1) = %d.\n",*

(p-1))

;// 等同於a[-1]

陣列與指標(1)

1.二維陣列定義的一般形式為 型別說明符 陣列名 常量表示式 常量表示式 如 定義a為3 4 3行4列 的陣列,b為5 10 5行10列 的陣列 float a 3 4 b 5 10 2.字串和字串結束標誌 為了測定字串的實際長度,c語言規定了乙個 字串結束標誌 0 3.字元陣列的輸入輸出可以有兩種...

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

指標是在32位系統下佔四個位元組,64位系統下佔八個位元組的一種型別,指標指向的內容可以是常量,變數,函式,結構體,指標本身,陣列,等等.一級指標 一級指標常常在函式傳參時使用,可傳的引數有一維陣列,常量指標,函式指標等等都可以 但我們要注意不要在函式中,通過改變形參的指向來達到改變實參指向的效果,...

指標, 指標的指標, 陣列, 指標陣列, 陣列指標

指標 int a 10 int p a 指標的指標 int b 20 int p b int p2p p 簡單陣列 int c 10 整數陣列,含有10個整數元素 也就是說每乙個元素都是整數 指標陣列 int p 10 指標陣列,含有10個指標元素 也就是說每乙個元素都是指標 陣列指標 int p ...