C語言 取陣列首位址

2021-10-21 17:03:18 字數 963 閱讀 4310

我們先看下面這段**:

#include

intmain()

;int

*p =

(int*)

(&arr+1)

;//&arr操作的是整個陣列,返回的指標指向整個陣列,&arr+1偏移的是整個陣列的長度。

printf

("%p %p \n"

,arr,

&arr)

;printf

("%p %p \n"

,arr+1,

&arr+1)

;printf

(" %d %d \n",*

(p-1),

*p-1);

printf

("%ld %ld \n"

,sizeof

(arr)

,sizeof

(&arr));

return0;

}

執行結果!

0x7ffc9973b2e0

0x7ffc9973b2e0

0x7ffc9973b2e4

0x7ffc9973b2f4

532763

208

1.&arr是操作的整個陣列,+1後偏移的是整個陣列的大小,int型別為4個位元組陣列中有5個int大小的元素,所以偏移的大小為20個位元組。

2.&arr+1返回的是乙個陣列指標,我們要把他強轉為int型別的指標,這樣我們後面偏移的就是4個位元組。

3.sizeof(arr)計算的是整個陣列的大小,sizeof(&arr)計算的指標的大小,&arr是乙個陣列指標,指標在64位作業系統中佔8個位元組,在32位作業系統中佔4個位元組。

4.在*p-1中,陣列越界,讀到了記憶體中ebp-1的值(ebp我也清楚,就是越界了,哈哈)

C語言 陣列首位址問題小記

include includeint main 以十六進製制列印陣列的首位址 這裡a與 a,a 0 一樣的結果 printf x n a printf x n a printf x n a 0 以十進位制列印陣列的首位址 printf d n a 輸出第乙個陣列元素的值 printf d n a 0...

取多維陣列首位址的方法

include include int main void char a 1 1 char a 2 2 3 對一維陣列取首位址,有兩種方法 char pa a 第一種 char pa a 0 第二種 char pa a 0 0 取二維陣列首位址的方法 char pa a 0 0 0 取三維陣列首位址...

陣列首位址

指標可以,開始我們說了指標可以認為是游離的,所以他本身的值可以變化,而自加就是讓指標的首位址變化,但是陣列是固定的,要變化乙個陣列的首位址就要用到雙指標。unsigned char p1 f 30 unsigned char p1 b 300 void change page unsigned ch...