0

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

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

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

PS Vectors 似乎是一种用字符串等做更多事情的方法,但我们还没有在课堂上接触到它们,因此我也不能使用它们。

谢谢

4

1 回答 1

0

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

举个例子,这样的事情很好用:

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。

于 2013-10-26T02:20:05.930 回答