在以下代码中,
#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 :(得分:5)
dp
被定义为指向short的指针,short是两个字节。这就是编译器所关心的。要实际使dp
指向指向short的指针,您需要执行
short **dp = &p;
答案 1 :(得分:3)
{/ 1}}指向无关紧要。它是指向dp
的指针,因此通过short
增加内存地址来进行添加。