我有一个名为thingy的对象,其方法是playWithString(char * text)。 我有一个字符数组,如 char testString = nullptr; 我想将testString传递给thingy.playWithString(char text)
我最初尝试将它放在playWithString方法的开头 text = new char [128] 这在函数中工作正常,但是一旦函数结束,testString再次为null。如何使其保留函数结果的值?
答案 0 :(得分:0)
听起来您正在尝试修改指针,而不是指针指向的数据。创建函数时,除非将参数设置为指针或引用,否则参数通常按值传递。这意味着复制参数,因此对参数的赋值仅修改副本,而不是原始对象。在参数是指针的情况下(数组参数表示为指向数组中第一个元素的指针),正在复制指针(尽管它指向的内容在函数的内部和内部都是相同的)。使用此指针,您可以修改它指向的内容,并使效果在函数之外保持不变;然而,修改指针本身(例如使其指向不同的数组)只是修改副本;如果你想让这样的突变持续到函数之外,你需要一个额外的间接层。换句话说,您需要将指针或引用传递给指针才能更改其目标。
P.S。正如其他人所指出的,对于使用字符串,你真的应该使用std::string
。话虽这么说,理解潜在的机制以及如何在学习时使用char*
是很好的。
答案 1 :(得分:0)
您需要在此处通过引用传递。这就是发生的事情:
void playWithString (char* myptr) {
myPtr = new char [128];
//myPtr is a local variable and will not change the fact that testString still points to NULL
*myPtr = 'a';
*myPtr = 'b';
}
main () {
char *testString = NULL; //testString is not pointing to anything
playWithString(testString);
//tesString is still null here
}
要解决此问题:通过引用传递。请注意&在playWithString的签名中。
void playWithString (char* &myptr) {
myPtr = new char [128];
//myPtr is a local variable and will not change the fact that testString still points to NULL
*myPtr = 'a';
*myPtr = 'b';
}
main () {
char *testString = NULL; //testString is not pointing to anything
playWithString(testString);
//tesString is still null here
}
答案 2 :(得分:0)
也许你应该使用c ++字符串(std :: string)?
#include <string>
#include <iostream>
class A {
public:
void foo(const std::string& s) {
std::cout << s << std::endl;
}
};
int main(int argc, char* argv[]) {
A a;
std::string str = "Hello!";
a.foo(str);
return 0;
}