我是C++的新手,目前我想澄清一件事。在我阅读本教程的过程中,有一个程序将用户的输入存储到数组中,并在用户退出程序时给出所有数字的总和:

//PROTOTYPE DECLARATION:
int readArray(int integerArray[], int maxNumElements);
int sumArray(int integerArray[], int numElements);
void displayArray(int integerArray[], int numElements);

int main(int nNumberofArgs, char* pszArgs[])
{
    cout << "This program sums values entered\n";
    cout << "Terminate the loop by entering a negative number" << endl;
    //store the numbers from the user into a local array
    int inputValues [128];
    int numberOfValues = readArray(inputValues, 128);
    //output the values and the sum of the values
    displayArray(inputValues, numberOfValues);
    cout << "The sum is " << sumArray(inputValues, numberOfValues) << endl;
    return 0;
}
int readArray(int integerArray[], int maxNumElements)
{
    int numberOfValues;
    for(numberOfValues = 0; numberOfValues < maxNumElements; numberOfValues++)
    {
        //fetch another number
        int integerValue;
        cout << "Enter next number: ";
        cin >> integerValue;
        if (integerValue < 0)
        {
           break;
        }
        //otherwise store the number into the storage array
        integerArray[numberOfValues] = integerValue;
    }
    //return the number of elements read
    return numberOfValues;
}
//displayArray - display the members of an array:
void displayArray(int integerArray[], int numElements)
 {
    cout << "The value of the array is:" << endl;
    for(int i = 0; i < numElements; i++)
    {
        cout << i << ":" << integerArray[i] <<   endl;
    }
    cout << endl;
}
//sumArray
int sumArray(int integerArray[], int numElements)
{
    int accumulator = 0;
    for(int i = 0; i < numElements; i++)
    {
        accumulator += integerArray[i];
    }
    return accumulator;
}

我的问题是:
  • 是否需要在每个函数中声明局部变量(例如int inputValues [128];)?
  • 将输入存储到函数原型(prototype)中声明的参数中是否正确?例如,我们可以仅将所有内容存储到integerArray[]中,而不创建存储数组integerValue吗?

  • 这看起来很明显,但是我想理解这一点,以免将来出错。

    最佳答案

    如果要将数组传递给函数,则

  • inputValues是必需的。
    int inputValues [128];
    int numberOfValues = readArray(inputValues, 128); //passing array to function
    

  • 无论哪种方式都可以。因此,您所拥有的没有错。

    如注释中所述,您还可以通过引用传递inputValues。您可以这样声明函数原型(prototype)。
    int readArray(int (&integerArray)[128]);
    

    当函数返回main时,对通过引用传递的数组所做的任何更改都将更新,因为您不再对数组的拷贝进行操作。

    编辑:

    正如@Kevin指出的,您可以使用模板函数在编译时获取数组的大小。
    template<size_t N> int readArray(int (&integerArray)[N]);
    

    08-26 10:21