向指针添加整数

Hap*_*tal 2 pointers integer addition

在以下代码中,

#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);  
}  
Run Code Online (Sandbox Code Playgroud)

现在我得到的输出是:0xbfb45e0a
0xbfb45e0c
0xbfb45e04
0xbfb45e06

在这里我理解p和p + 1,但是当我们做dp + 1时,那么因为dp指向short指针,并且因为指向short的指针大小为4个字节,所以dp + 1应该增加4个单位但是它
会增加只有2.
请解释原因.

T .*_*T . 5

dp被定义为指向short的指针,short是两个字节.这就是编译器所关心的.要实际dp指向指向short的指针,您需要这样做

short **dp = &p;
Run Code Online (Sandbox Code Playgroud)