看下面一道面試題:
#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...