在我看来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的定义后插入其他类型的变量定义,这个程序的执行结果就会不同了吧。
我无法理解这一句“最重要是这一句,首先++,也就为得到**p所指向的地址,为*p.”
#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;}