[英]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.