在我看来LZ的这个程序只是特殊情况
路漫漫其修远兮 吾将上下而求索
物理上不是,但在虚地址空间可能是连续的。
试试这个。
#include <iostream>
using namespace std;
void f(int ** p)
{
cout<<"*p = "<<(long)*p<<endl;
*p++;//这个解引用没用,去掉也可以。
cout<<"*p = "<<(long)*p<<endl;
}
int main()
{
int i =49;
int j =50;//加一句。
int * ip = &i;
cout<<"ip = "<<(long)ip<<endl;
f(&ip);
system("pause");
return 0;
}
我无法理解这一句“最重要是这一句,首先++,也就为得到**p所指向的地址,为*p.”
确实是先++,但是结果是p向后移动了一个int类型的大小。
这个程序确实特殊。因为内存分配连在一起了。如果在int i的定义后插入其他类型的变量定义,这个程序的执行结果就会不同了吧。
#include <iostream>
using namespace std;
void f(int ** p)
{
cout<<"*p = "<<(long)*p<<endl;
(*p)++;//加个扣号后,就能输出地址
cout<<"*p = "<<(long)*p<<endl;
}
int main()
{
int i =49;
int * ip = &i;
cout<<"ip = "<<(long)ip<<endl;
f(&ip);
return 0;
}