C语言的指针移位问题

时间:2021-08-05 07:25:50

先贴代码

#include <stdio.h>

int main(void)
{
double a[]={1.1,2.2,3.3};
unsigned int b,c,d;
b=&a[]+;c=&a[];d=&a[];
printf("diff -- %d", c-b);
return ;
}

执行结果是

diff  --  

这是32位的代码,所以可以用unsigned int类型来储存地址位。

由于a[0]是double类型,所以&a[0]+1的返回值是a[0]的地址向后移sizeof(double)个字节。

这样就导致了  &a[]+ == a+ == &a[] == (void *)a[]+  的结果。