我有几个关于指针重新分配,指针比较以及是否在Q1,Q2和Q3中分别共享地址空间的问题。ptrA = ptrB等同于ptrA =&* ptrB?,并且空值共享一个地址空间吗?
int main()
{
int var2 = 2;
int varnull = NULL;
int* myPtr_simple = &var2;
//Q1) are these 2 statements equivalent in terms of reassigning
//both myPtr_long and myPtr_short to what myPtr_simple points to?
int* myPtr_long = &*myPtr_simple;
int* myPtr_short = myPtr_simple;
//Q2) are these 2 statements equivalent?
std::cout<<(myPtr_short==myPtr_long)<<std::endl; //TRUE
std::cout<<(*myPtr_short==*myPtr_long)<<std::endl; //TRUE
//if var2 is non-null
//(address spaces of var2, myPtr_short, myPtr_long are equal)
std::cout<<(&*myPtr_short==&*myPtr_long)<<std::endl; //TRUE
std::cout<<(&*myPtr_short==&var2)<<std::endl; //TRUE
std::cout<<(&var2==&*myPtr_long)<<std::endl; //TRUE
//Q3) if varnull is null
//(myPtr_short and myPtr_long share address space, but not same as varnull...why?)
myPtr_long = NULL;
myPtr_short = NULL;
std::cout<<(&*myPtr_short==&*myPtr_long)<<std::endl; //TRUE
std::cout<<(&*myPtr_short==&varnull)<<std::endl; //FALSE
std::cout<<(&varnull==&*myPtr_long)<<std::endl; //FALSE
return 0;
}
请勿取消引用NULL指针。 – Jonas
Q1)。不,如果'myPtr_simple'为空,则第一个的行为是未定义的。 Q2)。不,一个是价值比较,另一个是指针比较。 Q3)。 '(&* myPtr_short ==&* myPtr_long)'是无稽之谈,因为这两个ptrs都是空的,行为是未定义的。 – George
不是一个答案,但你真的需要额外的东西,'std :: endl'呢? ''\ n''结束一行。 –