读书人

同样是添4个字节为什么p+1与p+sizeo

发布时间: 2013-09-08 15:21:21 作者: rapoo

同样是加4个字节,为什么p+1与p+sizeof(int)不一样?
如题:

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"

int main(void)
{
int *p;
p = (int *)malloc(sizeof(int));
printf("p = %p\n", p);
printf("p+1 = %p\n", p+1);
//printf("p+sizeof(int) = %p\n", p+sizeof(int));

return 0;
}


得到的结果是
p = 003807A8
p+1 = 003807AC
Press any key to continue

现在把程序中p+1注释掉,
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"

int main(void)
{
int *p;
p = (int *)malloc(sizeof(int));
printf("p = %p\n", p);
//printf("p+1 = %p\n", p+1);
printf("p+sizeof(int) = %p\n", p+sizeof(int));

return 0;
}

得到的结果是

p = 003807A8
p+sizeof(int) = 003807B8
Press any key to continue

我以为都是增加4个字节,但是不一样,为什么?
[解决办法]
p是int型指针,p+1相对p的地址是差4个字节
p+sizeof(int) = p + 4。 p + 4 和p的地址 差4*4=16个字节
[解决办法]
p+1
p是 int* 所以一次 步越 是4个
p指向的地址+ 4*1

p+sizeof(int) --》
p+4
p是 int* 所以 步越 是4
p指向的地址 + 4*4
[解决办法]
指针类型 的 +1 有个 类型的跨度的!


p + x ;
//这个时候p的指针移动多少字节对应的p指针类的字节跨度的数乘以x
//通俗就是:以p指针类型为单位的移动!

读书人网 >C语言

热点推荐