#include <stdio.h>
int main()
{
int a[]={11,12,13},*p;
printf("%x\n",a);
for(int i=0;i<3;i++)
printf("%x ",(a+i));
p=(&a)+1; //LINE1
printf("this is this %x\n",p); //LINE2
printf("%d ",*p);
printf("%d\n",*(p-1));
return 0;
}
在LINE1上进行指针运算后,为什么LINE2打印的地址不等于a [1]?相反,还有4个字节的差异。int * p = somearray但(p + 1)不等于somearray的地址[1]。为什么?
请您分享该程序的输出。这很难理解,至少对我来说 –
'printf''%x'接受一个'unsigned int',而不是'int *'。 – melpomene
'a'的类型为int(*)[3]'。表达式'(&a)+ 1'偏移指针'sizeof(int(*)[3])'。取出'&'。 –