|
首先我們要知道以下定義:
int (*p)[3];
p = &a;
p是一個指向具有3個int型元素的數組的指針。簡稱數組指針。
p+1的結果:為了更好地回答這個問題,我們來看如下定義:
int *r;
r = a;
r是一個指向int型元素的指針。
r+1我們都可以知道就是數組a[1]的位址。數組a的每個元素都是占四個位元組的int型。這四個位元組被編譯器看作一個整體。r+1的具體算法如下:r+1 = r + sizeof(int)。
此時我們來看一下p+1:注意上面出現的兩句話:
p是一個指向具有3個int型元素的數組的指針。
r是一個指向int型元素的指針。
r+1時編譯器會把int裡四個自己看作一個整體,p+1編譯器也會把int裡的四個自己看作一個整體。但是p是一個指向具有3個int型元素的數組的指針,是以p+1 = p + (sizeof(int))*3。
即p+1指向了a[3]的位址。
&a+1 = p+1 = &(a+3)
*(&a+1) = *(p+1) = &a[3];
(&a+1)-&a = p+1-p = 1;
*(&a+1) - a = &a[3] - &a[0] = 3.
最後一個就不用我分析了。
我在這裡還想說一點,就是關于對數組a取位址的用法:&a。其實這個程式的苦澀都是這個用法惹的禍。我認為編譯器應該對這種用法加以限制。畢竟它是沒法解釋的。因為a是一個指針常量,我們是不能對常量取位址的。可是目前的編譯器都對它放任.
希望對這個有研究的提點意見啊。謝謝了。
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script> 閱讀(292) | 評論(0) | 轉發(0) | 0
上一篇:DNA Sorting
下一篇:個人履歷
相關熱門文章
- Oracle資料庫學習之rownum...
- oc總結
- Linux裝置驅動程式
- Android對Linux核心的增強- lo...
- 淺析armlinux2.4.19啟動程式[h...
- test123
- 編寫安全代碼——小心有符号數...
- 使用openssl api進行加密解密...
- 一段自己列印自己的c程式...
- sql relay的c++接口
- 初學UNIX環境進階程式設計的,關于...
- chinaunix部落格什麼時候可以設...
- 一個通路量較大網站的伺服器。...
- 收音機驅動與v4l2架構的關系,...
- 如何将linux驅動改為裸機驅動(...
給主人留下些什麼吧!~~ 評論熱議