平時使用時指針與sizeof很難扯上關系,不外乎就int *p;sizeof(P)=4;但是在一些公司筆試時就會常常考察。
提出問題:
int a[5]={1,2,3,4,5}; sizeof(&a)=? sizeof(a)=? sizeof(a[0])=? sizeof(&a+1) =?
混淆了吧,o(︶︿︶)o 唉有時候我會苦悶,為什么要選擇程序員這條路呢,而且還要自學的。自己一個人找工作好辛苦啊。
解決問題前必須了解指針與數組的關系;
指針與數組當然是兩個不相關的概念,但是卻在編寫代碼時可以互用。
①、指針:int a[5]={1,2,3,4,5}; int *p=a;
以指針形式訪問 *(p+4) 表示從p向后偏移4個位置,然后取值。
以數組形式訪問 p[0]、p[1]....
②、數組:int a[5]={1,2,3,4,5};
以指針形式訪問 *(a+4) 表示數組首地址加上4 個字符的偏移量
以數組形式訪問、...
對,他們就這樣的關系,編譯器總是把以下標的形式的操作解析為以指針的形式的操作。
那么 對于問題
a 在這里代表是的
數組首元素的地址即a[0]的首地址。sizeof(a)=20
&a 代表的是
數組的首地址。sizeof(&a)=4
&a+1 表示數組的首地址+一個數組。則 +5*sizeof(int)。所以它表示以指針形式訪問,sizeof(&a+1)=4;
sizeof(a[0]) 其實是sizeof(1) 一個int的內存。 =4
sizeof(&a[0])、sizeof[&a[0]+1] 表示a[0]的地址+1,是指針類型 ,=4
////////////////////////如有誤解,歡迎指正。
posted on 2011-10-11 23:43
Yu_ 閱讀(674)
評論(3) 編輯 收藏 引用 所屬分類:
The Interview