陣列指標的意思即為通過指標引用陣列,例如int (*p)[10]
,此時p是乙個指標變數,指向乙個陣列大小為10的陣列,所以int (*p)[10]
即為乙個陣列指標。
由於運算子優先順序的優先順序大於
*
,若定義為int *p[10]
,此時該定義為乙個大小為10、用來存放指標的陣列。
首先,陣列名並不代表整個陣列,它只是代表陣列首元素的位址。當我們定義乙個陣列int arr[10]
時,可以使指標變數指向陣列元素,陣列元素的指標就是陣列元素的位址。
1
int*p = arr;
2int
*p =
&arr[0]
;
易知,上面兩條語句的含義相同。
int arr[10]
=;int*p = arr,
*q =
&arr[5]
; printf (
"%d\n"
,*p)
; printf (
"%d %d\n"
,*p +1,
*p +2)
; printf (
"%d %d"
,*q -1,
*q -2)
;
執行結果猜測,定義int *p = arr
,指向陣列首元素的位址,第一條printf
語句執行應為0。第二條語句做指標加法,p指向首元素,*p + 1
實現指向陣列下乙個元素,應為1,後同理應為2。第三條語句*q - 1
實現直線陣列元素上乙個的功能,應為4,後同理應為3
執行結果
在二維陣列中,首元素位址並非單個元素,而是首行的位址。
下面我們列出相同位址的不同表示方式:
int a[10]
[10];
a //二維陣列名,指向a[0]a[0
],*(a+0)
,*a //0行0列元素位址a+1
,&a[1]
//第一行首位址a+1
,&a[1]
//a[1][0]的位址a[1
]+2,
*(a+1)
+2,&a[1]
[2]//a[1][2]的位址
*(a[1]
+2),
*(*(a+1)
+2), a[1]
[2]//a[1][2]的值
該陣列可以看成10
個由10
個元素構成的一維陣列,a
即第0行首個元素的位址,a + 1
即第二個一維陣列,即第一行的首個元素的位址;a[1] + 2
首先指向第一行,即第二個一維陣列,再指向二維陣列首元素下乙個的下乙個的位址,*(a + 1) + 2
、&a[1][2]
同理。 C 指標陣列與陣列指標詳解
首先先定義乙個指標陣列,既然是陣列,名字就叫arr char arr 4 arr就是我定義的乙個指標陣列,它有四個元素,每個元素是乙個char 型別的指標,這些指標存放著其對應字串的首位址。即 char arr 4 當乙個變數出現左右都出現乙個運算子時,沒有記住運算子優先順序的人就會糾結arr變數到...
C 陣列指標與指標陣列的詳解
在 c c 中,陣列與指標是既相互關聯又有區別的兩個概念。當我們宣告乙個陣列時,其陣列的名字也是乙個指標,該指標指向陣列的第乙個元素。陣列名的意義 sizeof 陣列名 這裡的陣列名表示整個陣列,計算的是整個陣列的大小。陣列名,這裡的陣列名表示整個陣列,取出的是整個陣列的位址。除此之外所有的陣列名都...
C語言 陣列指標詳解,區別於指標陣列。
題意 使用指標 p 和prt 表示a 1 2 include include include include using namespace std int main int prt 3 a 不等於 prt 4 意義不同,用法相同 int t 4 指標陣列,即宣告了4個指標,要for迴圈初始化分別指...