*和&之间的差异将字符串传递给任何函数时?

时间:2016-02-28 06:32:01

标签: c++

这是一个简单的操作符重载我学到的程序,我无法理解为什么参数化构造函数正在使用' * st'而不仅仅是' st'或者'& st'。

现在,我知道传递引用,地址和值之间的区别。 在给定的示例中,我传递了一个字符串。如果它是通过引用传递的,那么参数化构造函数中的参数将是'& st'。我不确定它是否按地址传递字符串。

基本上,我不知道代码是如何在那里工作的。请解释一下,以及使用'& st'代替' * st'不工作。

class tyst
{
    int l;
    char *p;
public:
    tyst(){l=0;p=0;}
    tyst(char *st)
    {
        l=strlen(st);
        p = new char[l];
        strcpy(p,st);
    }
    void lay();
    tyst operator + (tyst b);
};

void tyst::lay()
{
        cout<<p<<endl;
}
tyst tyst::operator+(tyst b)
{
    tyst temp;
    temp.l=l+b.l;
    temp.p = new char[temp.l];
    strcpy(temp.p,p);
    strcat(temp.p,b.p);
    return temp;
}
int main()
{
    tyst s1("Markus Pear");
    tyst s2("son Notch");
    tyst s3;
    s3=s1+s2;
    s3.lay();
    return 0;
}

所以,如果有人能为我解决这个问题,我真的很感激。

2 个答案:

答案 0 :(得分:1)

构造函数需要一个指向c-string(空终止字符数组)的指针。对其应用指针算法将允许访问整个字符串。注意new[]返回指向第一个元素的指针; (单向)是如何使用指针的。

除了语法错误之外,通过引用传递单个字符是没有意义的。它对单个字符不感兴趣,它对数组的开头位置感兴趣。

这就像问某人他们的家庭住址是什么,他们会从草坪上给你一块石头。

答案 1 :(得分:1)

st是一个C风格的字符串。通过值传递

tyst(char st)

你只会得到一个角色。

通过引用传递

tyst(char & st)

您也只会获得一个字符,但您可以修改它。在这种情况下不太有用。你也可以传入对指针的引用,但我也没有看到它的用处。

这是如何运作的

tyst(char * st)

说该函数将采用一个指针,该指针可能指向一个字符,第一个是未知数量的字符,绝对没有,或完全垃圾。最后两种可能性是为什么使用引用优先于指针,但是你不能使用引用。但是,您可以使用std::string。在C ++中,这通常是首选方法。

tyst内部,假设指向未知但以空值终止的字符数,这几乎就是提供的内容。从技术上讲,你在这里用

做什么
tyst s1("Markus Pear");

是非法的。 "Markus Pear"是一个字符串文字。它可能存储在不可写的内存中,因此它是const char *,而不是char *