我在运行此代码时遇到错误
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);
}
答案 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(...)
希望这解决了不是数组或指针错误!