簡體   English   中英

C ++靜態空指針

[英]C++ static null pointer

我無法弄清楚以下情況:我有3個課程:

氨基酸

class AA
{
   public:
   AA();
   static CC *i;
};

BB

class BB
{
  public:
  BB();
  void static setI(CC *i);
};

抄送

class CC
{
  public:
  CC();
};

機密文件

AA::AA(){}
CC *AA::i= nullptr;

BB文件

BB::BB(){}

void BB::setI(CC *i)
{
  i = new CC();
  cout<<i<<endl;
  cout<<AA::i;
}

抄送

CC::CC(){}

因此,我在A類中具有CC類型的靜態指針。並且我通過以下方式啟動main:

int main(int argc, char *argv[])
{
    BB::setI(AA::i);
    return 0;
}

我得到的輸出是

//0xaeed70
//0

那么為什么AA::i不等於i

BB::setI的參數類型為CC *i ,指針本身通過值傳遞, i從參數復制。 函數內部對i任何修改都與原始參數AA::i無關。

您想要的可能是引用傳遞,即

void BB::setI(CC *&i)
{
  i = new CC();
  cout<<i<<endl;
  cout<<AA::i;
}

在表達式中, i = new CC()變量i是函數BB::setI局部變量,該函數已使用AA::i的值初始化,因為您調用了類似BB::setI(AA::i);函數BB::setI(AA::i); i賦任何值將僅更改此局部變量的值,而不更改調用該函數時已用於對其進行初始化的某些其他變量的值。

與這個較小的示例完全相同:

int i = 0;

void setI(int x)
{
    x = 1234;
    cout << x << endl;
    cout << i;
}

int main()
{
    setI(i);
}

正如您在此處可以更清楚地看到的那樣,您正在為函數的參數分配一個新值。
此參數與AA的成員無關。

不管其類型如何,如果您想讓函數修改一個對象,都需要向其傳遞對該對象的引用(或指針)。 您不能傳遞對象的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM