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。
请解释原因。

4

2 回答 2

5

dp被定义为一个指向short的指针,而一个short是两个字节。这就是编译器所关心的。要实际创建dp指向短指针的指针,您需要执行

short **dp = &p;
于 2010-05-10T14:11:45.110 回答
3

点在哪里 都没有关系dp。它是一个指针,short所以加法通过将内存地址增加sizeof(short) == 2.

于 2010-05-10T14:11:55.067 回答