指针加1的不同结果

条件: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操作的结果也不同

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值