2010-05-10 15 views
2

Dans le code suivant,Ajout d'un entier à un pointeur

#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); 
} 

Maintenant la sortie je suis arrivé était: 0xbfb45e0a
0xbfb45e0c
0xbfb45e04
0xbfb45e06

Ici, je compris p et p + 1, mais lorsque nous faisons dp + 1, alors que dp pointe vers un pointeur court, et puisque le pointeur sur court est de 4 octets, alors dp + 1 devrait augmenter de 4 unités mais
n'augmente que de 2.
Veuillez expliquer la raison.

+0

'short ** dp' est un pointeur vers un pointeur – Anycorn

Répondre

5

dp est défini comme un pointeur sur une courte distance et un court-circuit est deux octets. C'est tout le souci du compilateur. Pour réellement faire dp un pointeur vers un pointeur sur un court, vous devez faire

short **dp = &p; 
3

Peu importe où dp points. Il est pointeur vers short donc l'addition fonctionne en augmentant l'adresse mémoire par sizeof(short) == 2.