C++ 为什么不是';t在函数中设置此结构
我试图将结构指针传递给函数,并通过指针初始化结构。你知道为什么这样不行吗C++ 为什么不是';t在函数中设置此结构,c++,pointers,struct,C++,Pointers,Struct,我试图将结构指针传递给函数,并通过指针初始化结构。你知道为什么这样不行吗 struct Re { int length; int width; }; void test (Re*); int main() { Re* blah = NULL; test(blah); cout << blah->width; return 0; } void test(Re *t) { t = new Re{5, 5}; } str
struct Re
{
int length;
int width;
};
void test (Re*);
int main()
{
Re* blah = NULL;
test(blah);
cout << blah->width;
return 0;
}
void test(Re *t) {
t = new Re{5, 5};
}
struct-Re
{
整数长度;
整数宽度;
};
孔隙试验(Re*);
int main()
{
Re*blah=NULL;
测试(废话);
库特宽度;
返回0;
}
空隙试验(Re*t){
t=新的Re{5,5};
}
我做错了什么?指针被复制到函数中,因为它是通过值传递的。必须传递指向指针的指针或指向指针的引用,才能对其进行初始化:
void test(Re *&t) {
t = new Re{5, 5};
}
您没有在函数参数中初始化指针,因为在
test()
函数中:
void test(Re *t) {
t = new Re{5, 5};
}
您没有传递指针的引用。初始化指针对象需要指针的引用或指向指针的指针
您也可以这样做:
int main()
{
Re blah;
test(&blah);
cout << blah->width;
return 0;
}
void test(Re *t) {
t->length = 5;
t->width = 5;
};
intmain()
{
重复废话;
测试(等等);
库特宽度;
返回0;
}
空隙试验(Re*t){
t->长度=5;
t->宽度=5;
};
这个答案显然是错误的——您正在延迟一个NULL
指针。此外,OP希望在函数test
中对blah
所做的任何更改在返回后保持不变。您的代码示例没有这样做。@greatwolf我的想法没有错,我仍然可以在我的void test(Re*t)
函数中初始化指针的对象(正如Boris Vidolov指出的)。我忘记提到的一件事是在main()
中传递一个指针的引用以进行测试。但是谢谢你指出。最好不要使用代码示例,因为它仍然是错误的(blah->width
不会编译)。可能的重复工作很好,但是我对与使用int的区别有点困惑。我对C/C++还不熟悉,但有人告诉我stuct是像原始类型一样处理的?那么为什么test(int*t)可以工作,但是你需要对一个结构进行test(Re*&t)?@user2471908你必须向我们展示你的int*
代码,因为我敢打赌它与上面的代码不一样,如果你这样使用它,只会将Re
更改为int
@user2471908:无效测试(int*t=0;}
这是正确的,因为您通过引用传递int(因为您传递了一个int*
),但在这种情况下,您不是试图初始化re
,而是初始化一个re*
,因此您需要对它的引用(re**
或re*&
)是的,就像无效测试(int*t){*t=0;
。我不明白为什么这样做有效,但是无效测试(Re*t)不起作用?void test(Re*t)
只能初始化Re
的一个实例,就像@FlowerFire的答案一样,但你想初始化Re*
,而不是Re
。如果要初始化类型T
的实例,必须传递T*
或T&
。