Добавление целого числа к указателю - PullRequest
2 голосов
/ 10 мая 2010

В следующем коде,

#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.
Пожалуйста, объясните причину.

Ответы [ 2 ]

5 голосов
/ 10 мая 2010

dp определяется как указатель на короткий, а короткий - два байта. Это все, что заботит компилятор. Чтобы на самом деле сделать dp указатель на указатель на короткую позицию, вам нужно сделать

short **dp = &p;
3 голосов
/ 10 мая 2010

Неважно , где dp баллов. Это указатель на short, поэтому сложение работает путем увеличения адреса памяти на sizeof(short) == 2.

...