這個筆試題想必很多小夥伴都很面熟把,差不多10個人有7個人不會做這道筆試題,或許有知道答案的,但是僅僅知道答案,心裡還是一頭霧水。如果你真的不會那就請認真看完本文章學習一下吧!有的人認為
nslog(@"%d", *(&arrayname + 1 - 1));
加1減1不就是抵消了麼,那肯定是訪問陣列首位址,那列印的值肯定是 10,看起來是通的(引用宋小寶小品海參炒麵一句話:湯麵沒給錢,湯麵用炒麵換得給什麼錢?炒麵也沒給錢啊,炒麵沒吃給什麼錢?)但是含義是不一樣的。
1. arrayname 與 &arrayname
arrayname
是陣列名,所以列印出來是陣列首元素的位址&arrayname
含義就是陣列的位址(等價於指向arrayname
陣列的指標),因為沒增加1,所以陣列的位址就是陣列首元素的位址所以arrayname
&arrayname
列印出的位址是一樣的2.(arrayname + 1) 與 (&arrayname + 1)
(arrayname + 1)
通過上述解釋我們知道(arrayname + 1)
指標是指向int
型別,所以記憶體位址會加上4個位元組(&arrayname + 1)
我們知道&arrayname
是陣列的位址(等價於指向arrayname
陣列的指標) 因為增加1,這個陣列總共佔16個位元組,所以記憶體位址會加上16個位元組
int arrayname[4] = ;
/**2.增加 1 會往後移動16個位元組,開始是4個位元組的位置,移動後就是16個位元組後面的位置(也就是目前位置是20個位元組)
3.最後又賦值給,int型別的指標p(int型別佔4個位元組)
4.所以(p - 1)就是減去4個位元組,變成為16個位元組的位置,輸出的*(p - 1)值為40
*/int *p = (int *)(&arrayname + 1);
nslog(@"%d", *(p - 1));//輸出結果為 40\
經典筆試題 指標詳解
1.下面 輸出結果是什麼?int main int ptr int a 1 printf d,d a 1 ptr 1 system pause return 0 解析 a 1 此處a代表陣列首元素的位址,那 a 1 就代表第二個元素的位址,解引用,a 1 2。ptr 1 int ptr int a ...
經典筆試題
1.關鍵字static的作用是什麼?在c語言中,關鍵字static有三個明顯的作用 1 在函式體,乙個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變。2 在模組內 但在函式體外 乙個被宣告為靜態的變數可以被模組內所有函式訪問,但不能被模組外其它函式訪問。它是乙個本地的全域性變數。3 在模組內,...
經典筆試題筆記
1.有無序的實數列v n 要求求裡面大小相鄰的實數的差的最大值,關鍵是要求線性空間和線性時間 方法 桶排序 由抽屜原理知最在差值maxsub有如下關係 所以,當所桶大小設為 然後就成有序的了,接下來就只要比較相鄰,取最優就可以了。2.13個球乙個天平,現知道只有乙個和其它的重量不同,問怎樣稱才能用三...