2010-05-10 24 views
2

在下面的代碼,加成的整數的的指針

#include<stdio.h> 
int main() 
{ 
    short a[2]={5,10}; 
    short *p=&a[1]; 
    short *dp=&p; 
    printf("%p\n",p); 
    printf("%p\n",p+1); 
    printf("%p\n",dp); 
    printf("%p\n",dp+1); 
} 

現在,我得到的輸出是: 0xbfb45e0a
0xbfb45e0c
0xbfb45e04
0xbfb45e06

在這裏,我理解P和P + 1,但是當我們做dp + 1時,那麼因爲dp指向指向short的指針,因爲指向short的指針大小是4個字節,所以dp + 1應該增加4個單位,但是它會增加
只增加了2.
請說明原因。

+0

'short ** dp'是指向指針的指針 – Anycorn 2010-05-10 14:13:51

回答

5

dp被定義爲一個指向short和short的指針是兩個字節。這正是編譯器所關心的。真正讓dp指針的指針很短的,你需要做的

short **dp = &p; 
3

不要緊其中dp點。它是指向short的指針,因此通過增加內存地址sizeof(short) == 2來增加內存。