计算矩阵中的负整数

时间:2017-03-10 08:56:10

标签: c

我在运行此代码时遇到错误

negativenoinmatrix.c:10:16: error: subscripted value is neither array nor pointer nor vector
     if(z[i][j]<0)

我想计算矩阵中负整数的数量

#include <stdio.h>
int negnumbers(int *z, int n, int m)
{
    int count = 0;
    int i = 0;
    int j = m - 1;
    while (j >= 0 && i < n)
    {
        if (z[i][j] < 0)
        {
            count += (j + 1);
            i += 1;
        }
        else
            j -= -1;
    }
    return count;
}

int main()
{
    int n = 3, m = 4;
    int a[n][m];
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 4; j++)
            scanf("%d", &a[i][j]);
    }
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 4; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
    int val = negnumbers((int *) a, 3, 4);
    printf("%d", val);
}

3 个答案:

答案 0 :(得分:3)

该函数需要接受指向数组的指针,而不是指向单个项的指针。将其更改为

int negnumbers(int n, int m, int z[n][m])
...

int val = negnumbers(3, 4, a);

(根据“数组调整”规则,int z[n][m]将由编译器内部更改为指向第一个元素int (*z)[m]的指针。)

答案 1 :(得分:1)

将2-d数组传递给函数时,必须至少指定第2维。改为:

int negnumbers(int z[][4],int n,int m)

然后,您可以使用这种更直接的方法来计算负数:

for (int i = 0; i < n; i++) {
  for (int j = 0; j < m; j++) {
      if (z[i][j] < 0)
          count++;
  }
}

答案 2 :(得分:-2)

您正在调用指针 z ,并且还会从中创建动态矩阵。所以你需要为它分配一些内存,这可以通过以下方式完成:
malloc(z[i][j])

然后在完成后,确保现在释放内存,否则您将有内存泄漏,您可以在Memory Leaks wikipedia阅读更多内容。

这是通过致电free(...)

来完成的

希望这解决了不是数组或指针错误!