赋值使得整数指针没有强制转换[默认启用]

时间:2013-11-28 12:02:01

标签: variables pointers warnings

我是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;

1 个答案:

答案 0 :(得分:0)

简单地说,您对min函数的参数是错误的。您已将其定义为期望int * - 指向int的指针。在调用它时,您提供int。因此警告。 你可能会对你如何传递m感到困惑 - 但因为它是一个数组特殊规则appply而m实际上是一个指针 - 相当于&m[0]

我不会批评你的其他代码,那是给老师的!我建议在调试器中单步执行它,观察变量的变化。这应该是非常有启发性的。