C ++数组传入函数

时间:2014-09-11 06:06:02

标签: c++ arrays

我有一个名为thingy的对象,其方法是playWithString(char * text)。 我有一个字符数组,如     char testString = nullptr; 我想将testString传递给thingy.playWithString(char text)

我最初尝试将它放在playWithString方法的开头     text = new char [128] 这在函数中工作正常,但是一旦函数结束,testString再次为null。如何使其保留函数结果的值?

3 个答案:

答案 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;
}