【问题标题】:Assignment makes pointer from integer without a cast [enabled by default]赋值使指针从整数不进行强制转换[默认启用]
【发布时间】:2013-12-14 11:08:40
【问题描述】:

我是 C 的新手,我们的老师给了我们这个作业,找到从 [0; 生成的矩阵中的最小值; MAX-1]。该矩阵应被解释为一维数组。生成工作正常,但我无法让最小部分工作,它应该返回 int MINIMUM - 这工作,但我不知道如何链接 pos_xpos_ymin 函数中使用 ma​​in 中的变量,所以我可以在 ma​​in 中打印它们。我得到的警告是警告:赋值使指针从整数不进行强制转换[默认启用]。 非常感谢任何帮助。

#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;

【问题讨论】:

    标签: variables pointers warnings


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 2013-06-05
      • 2011-01-05
      相关资源
      最近更新 更多