一維陣列和指標
int array[3]
=printf
("&array:%p array:%p &array[0]:%p\n"
,&array, array,
&array[0]
);
&array表示的是整個陣列的位址,array表示陣列首位址,&array[0]第乙個元素位址。三者列印出來的值都是相同的,但是表示的空間不同,其中array和&array[0]代表的是同乙個空間,&array表示的是整個陣列的空間。
array +
1//指向第二個元素的位址,即array[1]的位址,即偏移sizeof(int)個位元組
&array +
1//向後偏移整個陣列的大小,即3 * sizeof(int)個位元組
int*p = array;
//p + 1 ---> &array[1] ---> array + 1 三者相同
//*(p + 1) ---> array[1] ---> *(array + 1) 三者相同
二維陣列和陣列指標
陣列指標本質上是指標,指標指向的元素是陣列。
/*array --> 代表第一行位址
array[0] --> 代表第一行第乙個元素位址
*(array + 1) == array[1] --> 代表第二行第乙個元素位址
array + 1 --> 代表第二行位址
array[1] + 1 --> 代表第二行第二個元素位址
&array --> 整個二維陣列位址
&array + 1 --> 偏移整個二維陣列大小*/
intmain
(int argc,
char
const
*ar**)
;int
(*p)[3
]= array;
printf
("%d\n"
, array[1]
[1])
;printf
("%d\n",*
((int*
)(array +1)
+1))
;printf
("%d\n",*
(array[1]
+1))
;printf
("%d\n",*
(p[1]+
1));
printf
("%d\n",*
(*(p +1)
+1))
;return0;
}
上面五個列印出來的結果都是5。p是乙個陣列指標,指向的元素是乙個擁有3個元素的一維陣列。p[1]就表示array的第二行的首位址,p[1] + 1也就表示為第二行第二個元素的位址,再提取指標對於空間的值即為5。p + 1表示將指標偏移到array第二行的首位址,* (p + 1)表示了第二行第乙個元素的位址,* (p + 1) + 1即表示第二行第二個元素的位址。
注意:* (p + 1)與p + 1所代表的空間是不同的,* (p + 1)代表乙個int的空間,p + 1代表整個陣列3個int的空間
陣列指標和指標陣列
陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...
陣列指標和指標陣列
一 定義 陣列指標 陣列指標 是指向陣列 首元素的位址的 指標,其本質為指標 這個指標存放的是陣列首位址的位址,相當於2級指標,這個指標不可移動 指標陣列 陣列元素為指標的陣列,其本質為陣列。二 舉例 int a 3 4 這個無需多說,就是乙個 二維陣列 int p 4 就相當於int p 4 它就...
陣列指標和指標陣列
這兩個名字不同當然所代表的意思也就不同。我剛開始看到這就嚇到了,主要是中文太博大精深了,整這樣的簡稱太專業了,把人都繞暈了。從英文解釋或中文全稱看就比較容易理解。指標陣列 array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標 陣列指標 a pointer to an ar...