1

我想做一个函数,它接收一个二维数组并返回它的行('which')作为一个简单的数组。我写了这个:

int *row(int *array, int lines, int columns, int which)
{
    int result[columns];

    for (int i=0; i<columns; i++)
    {
        result[i] = *array[which][i];
    }
    return result;
}

但是,在第 7 行中,我收到了以下错误:数组下标的无效类型 'int[int]'。知道如何正确执行此操作吗?我还尝试将二维数组作为数组处理,但没有成功。我是新手,所以请避免太高级的概念。

谢谢您的帮助!

更新:感谢您的帮助!现在我的代码看起来像:

int n;  //rows
int m;  //columns
int data[100][100];   
int array[100];

int *row(int *array, int rows, int columns, int which)
{
    int* result = new int[columns];
    for (int i=0; i<columns; i++)
    {
        result[i] = *array[which*columns+i];
    }
    return result;
    delete[] result;
}

int main()
{
    array=row(data, n, m, 0);
}

我仍然在 main 中遇到错误:将 'int*' 分配给 'int [100]' 时的类型不兼容

现在可能是什么问题?我也不知道在哪里使用 delete[] 函数来释放数组。

非常感谢你的帮助!

4

6 回答 6

4

你不能这样做:

int result[columns];

您需要动态分配:

int* result = new int[columns];

此外,您的使用array看起来是错误的。如果array将是一个单一的指针,那么你想要:

result[i] = array[which*columns + i];
于 2012-04-11T14:21:19.200 回答
2

“数组”是一维的。您可以通过以下方式访问索引为 [which][i] 的元素:array[which*columns + i]。还要删除星号,因为数组只是一个指针。

编辑:你也不能返回本地数组 - 你需要处理动态内存:

int* result = new int[columns];

然后特别注意释放这个内存。其他选择是使用 std::vector。

于 2012-04-11T14:20:56.130 回答
1

有几个错误需要首先修复。

  1. 您永远不应该从函数返回指向局部变量的指针。在上面的代码中,您试图返回一个指向“结果”内容的指针,它是一个局部变量。
  2. 不能使用可变大小声明数组,在您的情况下是可变列。
  3. 如果数组是一个二维数组,我认为这是你的意图,那么 array[which][i] 会给你一个 int。你不必取消引用它。

虽然我知道我没有遵守这里的发帖礼仪,但我建议你从一本好的教科书开始,掌握基础知识,遇到问题时来这里。

于 2012-04-11T14:30:02.350 回答
1

数组的大小需要是编译时常量。

您可能应该使用std::vector(可能与 2D 矩阵类一起使用),而不是弄乱数组。

于 2012-04-11T14:30:54.233 回答
0

您可以通过使用避免所有这些指针算术和内存分配std::vector

#include <vector>
#include <iostream>

typedef std::vector<int> Row;
typedef std::vector<Row> Matrix;

std::ostream& operator<<(std::ostream& os, const Row& row) {
  os << "{ ";
  for(auto& item : row) {
    os << item << ", ";
  }
  return os << "}";
}

Row getrow(Matrix m, int n) {
  return m[n];
}

Row getcol(Matrix m, int n) {
  Row result;
  result.reserve(m.size());
  for(auto& item : m) {
    result.push_back(item[n]);
  }
  return result;
}

int main () {
  Matrix m = {
    { 1, 3, 5, 7, 9 },
    { 2, 4, 5, 6, 10 },
    { 1, 4, 9, 16, 25 },
  };

  std::cout << "Row 1: " << getrow(m, 1) << "\n";
  std::cout << "Col 3: " << getcol(m, 3) << "\n";  
}
于 2012-04-11T14:33:07.213 回答
0
double *row(double **arr, int rows, int columns, int which)
{
double* result = new double[columns];
for (int i=0; i<columns; i++)
{
    result[i] = arr[which][i];

}
return result;
delete[] result; 
}

这将返回该行。

于 2015-02-11T11:11:04.957 回答