关于网友提出的“ 同样是加4个字节,为什么p+1与p+sizeofint不一样?”问题疑问,本网通过在网上对“ 同样是加4个字节,为什么p+1与p+sizeofint不一样?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 同样是加4个字节,为什么p+1与p+sizeofint不一样?
描述: 如题:
#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个字节,但是不一样,为什么?
解决方案1: p+1
p是 int* 所以一次 步越 是4个
p指向的地址+ 4*1
p+sizeof(int) --》
p+4
p是 int* 所以 步越 是4
p指向的地址 + 4*4
解决方案2: 指针类型 的 +1 有个 类型的跨度的!
p + x ;
//这个时候p的指针移动多少字节对应的p指针类的字节跨度的数乘以x
//通俗就是:以p指针类型为单位的移动!
解决方案3: p是int型指针,p+1相对p的地址是差4个字节
p+sizeof(int) = p + 4。 p + 4 和p的地址 差4*4=16个字节
以上介绍了“ 同样是加4个字节,为什么p+1与p+sizeofint不一样?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2014774.html