您的位置:首页 > 其它

指针中P和P+1的大小关系的比较

2017-10-31 15:30 239 查看
#include "stdafx.h"
#include <stdio.h>

int main()
{

float a = 1;
float *p = &a;

printf("%p\n", &*p);
printf("%p\n", &*(p + 1));
printf("%p\n", &*(p + 2));
return 0;
}


在做一个测试的时候遇到这样一个问题,大概意思就是:定义了三个寄存器,分别用指针p1、p2、p3指向这三个寄存器,然后要测试判断语句if((*p1)*(*(p1+1))>(*p2)*(*(p2+1))),和if((*p1)*(*(p1+1))>(*p3)*(*(p3+1)))。
实际上,就是分别对寄存器地址赋值不同,从而覆盖判断语句的。指针的类型定义的是float型。一开始,我以为代码写错了,float型占32位,地址值+1会直接破坏这个类型,没有办法进行测试的。后来,写了上面那个小测试验证了一下,**发现并不是我想的那样**。
运行程序后输出结果为:




WTF!!!

p+1竟然比p大4!!一时难以理解,继续试试其他的,然后发现,对指针的类型改变时候,将会影响p+1比p的大小,当定义为double类型的时候,两者会相差8。由此推断,p+1实际上是下一个结构体p的地址值,并不是p的地址值加1!

总结:在C语言中,定义指针p后,p+n实际上的意思是:p+n*strlen(type(p)) 的地址。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c 指针