指针中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语言,指针和数组大小之间的关系
- 十六周——指针比较大小
- 指针比较大小
- 指针做形参比较字符串的大小、
- 指针引用数组元素比较大小
- 指针(大小比较)等
- 指针(内存大小和数据类型无关,和系统操作位数有关),对象,地址,和系统操作位数的关系
- 用指针(比较三个字符串的大小)
- 指针 数组 两个方式调用数组元素 比较大小
- 第16周项目二运用指针比较两个数的大小(需调试,不知问题出在哪)
- 输入两手牌,两手牌之间用“-”连接,每手牌的每张牌以空格分隔,“-”两边没有空格,如:4 4 4 4-joker JOKER 请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR
- 指针比较大小
- 数组的递进理解——由一维到多维,数组和指针的关系比较等
- 字符串的大小及与指针的关系
- 使用指针比较整型数据的大小
- 比较两数大小(指针)
- 利用指针比较大小
- 指针 比较三个数大小
- 用指向函数的指针比较大小
- c语言:指针比较两个数的大小