int main(int args, char* argv[]) {
string* list;
listDevices(list);
printf("device 0: %s\n", list[0]); // prints some junks
}
void listDevices(string* list) {
list = new string[1];
list[0] = "abc";
printf("device 0: %s\n", list[0]); //prints "abc"
}
在上面的代码中,list
数组被初始化并在listDevices
方法中分配了一些值,但是当我在函数外部打印它时,会打印一些容器。
如果我将string list[1]
作为输入发送到上述方法而不是发送string* list
时(尽管两者都是指针),为什么它能正常工作?
答案 0 :(得分:3)
您只能在()
中更改指针的本地副本。 listDevices
中的指针保持不变。您可能想要返回指向新列表的指针:
main
或者,您可以通过引用传递指针,但出于样式原因,我更喜欢return方法。
顺便说一下,您可能不需要首先使用指针和string *listDevices() {
string *list = new string[1];
list[0] = "abc";
printf("device 0: %s\n", list[0]); //prints "abc"
return list;
}
int main(int args, char* argv[]) {
string *list = listDevices();
printf("device 0: %s\n", list[0]); // Will now work
}
。最有可能的是,您的代码应该看起来像这样:
printf
答案 1 :(得分:2)
if (! $(this).text().trim().length )
是list
类型的变量,您可以按值传递。在方法中更改pointer-to-string
本身不会将更改带到方法范围之外。
您希望通过引用传递它:
list
答案 2 :(得分:1)
您需要将list
作为参考传递给函数:
void listDevices(string* &list) {
list = new string[3];
list[0] = "abc";
printf("device 0: %s\n", list[0].c_str()); //prints "abc"
}
int main(int args, char* argv[]) {
string* list=nullptr;
listDevices(list);
printf("device 0: %s\n", list[0].c_str()); //now prints "abc"
// Don't forget to do `delete[] list` at the end !
return 0;
}
注意:当您在问题中标记c++
时,请检查this link,表明在.c_str()
打std::string
时使用printf
delete[] list
1}}。
警告:不要忘记最后ImageView
!