2016-03-08 108 views
0
  1. *&x總是等於x?如果不是,它什麼時候不是?
  2. &*x總是等於x?如果不是,它什麼時候不是?

我的猜測是,(1)永遠是真實的,但(2)並不總是正確的,因爲x可能並不總是一個指針,所以我們不能說出*xC++:地址解引用和取消引用地址的地址

+3

到查找操作符重載。 –

+1

你的猜測是正確的(因爲你指出 - 得到它,指出?:P)。 –

+0

@CaitLANJenner否和否。請記住,運營商超載。 – juanchopanza

回答

1

在你的第一個例子中,你得到地址x(它給你一個指向x的指針),然後你將該指針重新設置回x。所以是啊,應該是這樣,除非x是一個超載運營商*&的類。

你的第二個例子只適用於pointersclasses已經超載了*運算符。

如果它與原始指針一起使用,那麼它應該是相同的。您尊重x,它將返回對存儲在x中的值的引用,然後獲取存儲該值的地址,當然這是x

如果它與pointerclass一起使用,並且class已經超載了&運算符,則它不一定是。

class A 
{ 
public: 
    int v; 
    //int operator*() { return v; } 
    int * operator&() { return &v; } 
}; 

A* w = new A(); 
int* ptr = &*w;  
0
  1. 是和否,因爲*&x意味着它是參考指針意義

    int v1 = 10; int *v2 = &v1; int *&v3 = v2; cout << *v3; *v2 = 11; cout << *v3;

會發出放10和11.While聲明*&x並不意味着獲取v3地址的值。在這種情況下,v3是指向它的指針的地址。但是如果你使用* & x外部聲明它會給你存儲在v3地址的值。

  • 我相信第二是非法的,如果&或*沒有過載
  • +0

    當'x'是一個指針時,第二個似乎不是非法的,那麼'&* x'就是'x'指向的變量的地址。 – marczoid