如何在C ++中将字符串数组传递给函数作为常量?

时间:2013-10-26 01:59:18

标签: c++ arrays string const

我正在编写一个结构化编程作业,要求我制作一个程序,允许用户输入名字等等等等等。将名称放入字符串数组后我想要做的是将它们打印到屏幕上。我希望通过将数组和其中包含的名称数量传递给一个函数然后将它们打印到屏幕上来实现这一点。我想将数组和名称的数量作为常量传递,以便它们可以保护它们,因此它们不能被函数修改,只是只读。我不明白为什么我不能把const放在字符串数组或名字数之前。

void writeNames (const string namelist[], const int number_of_names)

这是我必须接受的东西,还是有一种方法可以将这两种方式作为只读方式传递给函数?我可以在没有这个的情况下完成作业,所以这更像是一个好奇的问题而不是“帮助我完成我的家庭作业”。

P.S。向量似乎是一种用字符串等方式做更多事情的方法,但我们还没有在课堂上使用它们,因此我也不能使用它们。

由于

1 个答案:

答案 0 :(得分:0)

如果没有看到你在函数中做了什么,很难回答这个问题,但我的水晶球说你可能正在做一些可能修改你方法中的一个参数的东西,所以编译器抱怨因为你声明了参数const。

举个例子,像这样的东西就可以了:

void writeNames(const std::string namelist[], const int number_of_names)
{
    for(int i = 0; i < number_of_names; i++) {
        std::cout << namelist[i] << std::endl;
    }
}

但是,这样的事情会导致编译器错误,因为您正在更改其中一个变量:

void writeNames(const std::string namelist[], const int number_of_names)
{
    while(number_of_names--) {   // <-- We're modifying a const value here
        std::cout << namelist[count] << std::endl;
    }
}

顺便说一下,将const修饰符放在“number_of_names”参数上有点多余,因为你要按值传递参数,所以改变函数中的值对调用函数中输入参数的值没有影响。但是,数组中任何字符串的更改都会反映在调用函数中,因此const修饰符有意义。通常,您只会对指针或通过引用传入的参数使用const。