我是C的新手,我们的老师给了我们这个功课,找到了从[0; MAX-1]。矩阵应解释为一维数组。生成工作正常但我无法获得最小部分工作,它应该返回int MINIMUM - 这有效,但我不知道如何链接 pos_x 和 pos_y 在 min 函数中使用 main 中的变量,以便我可以在 main 中打印它们。我收到的警告是警告:赋值使整数指针没有强制转换[默认情况下启用] 。 任何帮助非常感谢。
#include <stdio.h>
#include <stdlib.h>
#define N 5
void fill_random(int *m, int max){
for(int i = 0; i < N*N; i++)
m[i] = rand() % max;
}
int min(int *m, int *pos_x, int *pos_y){
int minimum = m[0];
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
if(m[i * N + j] < minimum){
minimum = m[i * N + j];
pos_x = i;
pos_y = j;
}
return minimum;
}
int main(void){
int m[N*N];
printf("Fill random from [0;MAX-1]:\n");
int input;
printf("Enter MAX: ");
scanf("%d", &input);
fill_random(m, input);
printf("\nMinumum:\n");
int pos_x, pos_y;
min(m, pos_x, pos_y);
printf("\nMinimum is %d at [%d][%d]", min(m, pos_x, pos_y), pos_x, pos_y);
}
return 0;
答案 0 :(得分:0)
简单地说,您对min
函数的参数是错误的。您已将其定义为期望int *
- 指向int的指针。在调用它时,您提供int
。因此警告。
你可能会对你如何传递m感到困惑 - 但因为它是一个数组特殊规则appply而m实际上是一个指针 - 相当于&m[0]
。
我不会批评你的其他代码,那是给老师的!我建议在调试器中单步执行它,观察变量的变化。这应该是非常有启发性的。