關於陣列指標的一道面試題

2022-02-13 16:24:10 字數 423 閱讀 1075

看下面一道面試題:

#include

#include

int main(void)

; int *ptr=(int *)(&a+1);

printf("

%d,%d

",*(a+1),*(ptr-1));

return

0;}

輸出結果為:2,5

在這裡主要是考察*(a+1)和&a+1的區別了。

很顯然*(a+1)取的是a[1],然而&a+1取的是什麼呢?&a不是首位址加1,而是加上1個a陣列大小的偏移。因此ptr實際上等於a+5,所以*(ptr-1)實際上取的是a[4]。

原為是:

&a相當於乙個陣列指標 int (*)[5],該指標加1相當於移動5個int的儲存空間,因此ptr等於a+5。

關於C陣列指標的一道面試題

本文由 lonelyrains c語言指標是經典問題了,還是做錯啊 int main int p int a 1 a陣列的位址加1,是以a陣列的大小為乙個單位 char pc1 char a 1 同上,只是pc1變成了字元指標,下次pc1加減運算是乙個位元組大小為乙個單位 char pc2 char...

關於瀑布流陣列的一道面試題

今天看到一道題目,當時不會,聽了講解之後,覺得很有意思,先記錄下來。原題如下 20 個隨機數字,放到 3 個陣列中 arr1,arr2,arr3 保證 3 個陣列 的和相差最小 先來解釋一下這個題目 就是把20個隨機數放在3個陣列中,然後把每個陣列中的值相加,最後再把每個陣列中的和相減,得到差值是最...

一道面試題

一道面試題 射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。然後開始遞迴狂打槍,一到10就記錄 if params i 10 在迴圈的控制中已經排除了大於10的可能性 i 10 pa...