条件:datatype *p;
结论:p=p+1代表的是p指向下一个对象,也就是说p的值不一定是真正意义上的加1,而是加一个sizeof(datatype)*1
#include <stdio.h>
#include <stdlib.h>
struct datatype{
char a;
int b;
double c;
} ;
int main()
{
int i;
char buf[10],*p;
p = buf;
printf("char buf[10],*p; p = buf;\n");
printf("\n");
for(i=0;i<10;i++)
{
printf("p+%d=%p\n",i,p+i);
}
printf("\n");
short buf1[10],*p1;
p1 = buf1;
printf("short buf1[10],*p1; p1 = buf1;\n");
printf("\n");
for(i=0;i<10;i++)
{
printf("p1+%d=%p\n",i,p1+i);
}
printf("\n");
int buf2[10],*p2;
p2 = buf2;
printf("int buf2[10],*p2; p2 = buf2;\n");
printf("\n");
for(i=0;i<10;i++)
{
printf("p2+%d=%p\n",i,p2+i);
}
printf("\n");
struct datatype buf3[10],*p3;
p3 = buf3;
printf("struct datatype buf3[10],*p3; p3 = buf3;\n");
printf("\n");
for(i=0;i<10;i++)
{
printf("p3+%d=%p\n",i,p3+i);
}
return 0;
}
运行结果:
nux@ubuntu:~$ gcc p+1.c
linux@ubuntu:~$ ./a.out
char buf[10],*p; p = buf;
p+0=0xbfbb8512
p+1=0xbfbb8513
p+2=0xbfbb8514
p+3=0xbfbb8515
p+4=0xbfbb8516
p+5=0xbfbb8517
p+6=0xbfbb8518
p+7=0xbfbb8519
p+8=0xbfbb851a
p+9=0xbfbb851b
short buf1[10],*p1; p1 = buf1;
p1+0=0xbfbb84e8
p1+1=0xbfbb84ea
p1+2=0xbfbb84ec
p1+3=0xbfbb84ee
p1+4=0xbfbb84f0
p1+5=0xbfbb84f2
p1+6=0xbfbb84f4
p1+7=0xbfbb84f6
p1+8=0xbfbb84f8
p1+9=0xbfbb84fa
int buf2[10],*p2; p2 = buf2;
p2+0=0xbfbb84c0
p2+1=0xbfbb84c4
p2+2=0xbfbb84c8
p2+3=0xbfbb84cc
p2+4=0xbfbb84d0
p2+5=0xbfbb84d4
p2+6=0xbfbb84d8
p2+7=0xbfbb84dc
p2+8=0xbfbb84e0
p2+9=0xbfbb84e4
struct datatype buf3[10],*p3; p3 = buf3;
p3+0=0xbfbb8420
p3+1=0xbfbb8430
p3+2=0xbfbb8440
p3+3=0xbfbb8450
p3+4=0xbfbb8460
p3+5=0xbfbb8470
p3+6=0xbfbb8480
p3+7=0xbfbb8490
p3+8=0xbfbb84a0
p3+9=0xbfbb84b0
结果分析:由运行结果可看出,当p所指向的对象的类型不同时,其加1操作的结果也不同