指针相减-堆和栈结果不同
2012-12-11 22:25 kennyMc 阅读(299) 评论(0) 编辑 收藏 举报#include <iostream> #include <string> using std::cout; using std::endl; using std::string; int main() { int *p; int *p1; int i=10; int j=20; p=&i; p1=&j; cout<<"指针指向栈空间"<<endl; cout<<"p:"<<p<<" *p:"<<*p<<endl; cout<<"p1:"<<p1<<" *p1:"<<*p1<<endl; *p=p1-p;//注意这里p1-p返回的是int类型 cout<<"p:"<<p<<" *p:"<<*p<<endl; p=p1=0; cout<<"指针指向堆空间"<<endl; p=new int(10); p1=new int(20); cout<<"p:"<<p<<" *p:"<<*p<<endl; cout<<"p1:"<<p1<<" *p1:"<<*p1<<endl; *p=p1-p;//注意这里p1-p返回的是int类型 cout<<"p:"<<p<<" *p:"<<*p<<endl; delete p; delete p1; return 0; }
输出结果:
能够看出,在栈上分配的变量内存是连续的,指针相减得到的是两地址差/变量类型,这里p和p1地址相距4,p1-p=-4,类型是int,32位cpu上是4个字节,所以结果是-1。
而通过new关键在在堆上分配的内存之间是不连续的,堆不像栈,栈先进后出,是连续的,所以这里p和p1地址相距就不是4。
本文版权归kennyMc和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。