1

我试图在一个函数中将我的数组的两行添加在一起,但它没有这样做,我不知道为什么它不这样做,因为代码看起来正确并且不会出错。我曾尝试使用 * 和 & 通过引用传递它,但我总是遇到代码错误。谢谢

#include <iomanip>
#include <iostream>
#include <fstream>

using namespace std;

void addRow(int arr[100][100], int firstrow,int secondrow,int rows, int cols);

void addRow(int arr[100][100], int firstrow,int secondrow,int rows, int cols){
    int i =0;
    int j = cols;
    while(i<rows){
        arr[secondrow][j]+=arr[firstrow][j];
        i++;
        j++;
    }
    print(arr,rows,cols);
}
4

3 回答 3

3

数组传递正确,是您的代码没有正确添加。

您在开始时设置jcols,然后使用 以递增的顺序移动它j++。结果,您对数组元素的所有访问都超出了行尾。循环退出条件也不正确,除非您的矩阵始终是正方形的(在这种情况下,没有必要为行和列传递单独的计数)。

这应该有效:

void addRow(int arr[100][100], int firstrow,int secondrow,int rows, int cols){
    for(int j = 0 ; j != cols ; j++){
        arr[secondrow][j] += arr[firstrow][j];
    }
    print(arr, rows, cols);
}
于 2012-10-02T14:40:13.647 回答
3
void addRow(int (&arr)[100][100], int firstrow,int secondrow,int rows, int cols);

如果您想通过引用传递,这将是正确的签名。

template <typename std::size_t rows, std::size_t cols>
void addRow(int (&arr)[rows][cols], int firstrow,int secondrow);

那么您甚至不需要在程序上下文中将行和列作为参数。

于 2012-10-02T14:41:17.087 回答
2

更改arr[100][100]arr[][100]。(实际上,其他一些更改,例如使 100 成为符号常量,将有助于改进代码的样式,但这是需要更改的主要内容。)

原因并不容易理解,但对 C++ 编程很重要。实际传递给函数addRow()的是——请仔细阅读以下内容——100 个整数的第一行的地址。 这个地址又是第一个int的地址,但是传递的语义如我所说。因此,在 内addRow(),符号arr充当指向 100 个整数数组的常量指针,而不是指向 10,000 个整数数组的常量指针。

于 2012-10-02T14:48:50.163 回答