回到我试图获取由类的成员函数返回一个指针的地址:地址的功能
class Test{
...
char* d;
...
char* getData(){
return d;
}
...
}
现在我试图让d的地址(假设* d有有效值):
Test t;
char** pd = &t.getData();
这给出了一个语法错误,不会在VC2010上编译。我怎样才能得到成员指针变量的地址?
回到我试图获取由类的成员函数返回一个指针的地址:地址的功能
class Test{
...
char* d;
...
char* getData(){
return d;
}
...
}
现在我试图让d的地址(假设* d有有效值):
Test t;
char** pd = &t.getData();
这给出了一个语法错误,不会在VC2010上编译。我怎样才能得到成员指针变量的地址?
您的getData()
函数返回指针的副本。如果你想利用原来的指针成员的地址,你就必须改变它,以便它返回一个指针引用:
char *&getData() { return d; }
(是否返回内部指针引用,并采取他们的地址是从设计的角度来看不错的想法是另外一回事。)
简短版本:你正在尝试取一个右值的地址,这是非法的。
稍大版本:当你做t.getData()
时,*d
是按值返回的。这很容易忘记,因为大多数时候,当您使用指针时,您不必担心通过值与传递引用。你只是返回指针,因为它很小。
这里,
char** pd = &t.getData();
t.getData的返回值是指针的副本,它是一个右值,这意味着它是暂时的,将停止表达期结束后存在。由于这个原因,你不能采用右值的地址 - 只要语句结束,它就会失效。如果你把这个地址在一个左值然而,它工作得很好:
Test t;
char* temp = t.getData();
char** pd = &temp;
这是因为现在气温是左值,你可以对自己的地址。
对于你想要做的事,虽然你可能会更好getValue()
返回char**
。
你不行吗 - >'char ** getData(){return&d; }','char ** pd = t.getData();' –
你能发布你得到的语法错误吗? – Ari