【问题标题】:Pointer error C指针错误 C
【发布时间】:2014-05-23 06:05:27
【问题描述】:

我需要为学校编写这段代码。它必须搜索数组的最小值和最大值。我收到一个错误:

从“double”类型分配给“double *”类型时不兼容的类型

我怎样才能让它工作?

#include<stdio.h>

void minmax(double tomb[], double* mini , double* maxi) {
 int i;
 mini=&tomb[0];
 maxi=&tomb[0];
 for(i=1; i<10; i++){
     if(tomb[i]>*maxi){
         maxi=&tomb[i];
     }
     if(tomb[i]<*mini){
         mini=&tomb[i];
     }
 }
}


int main(void) {
  double t[] = {1.2, 2.3, 6.1, -3, -2.7, 2.7, 11.11, -20, 0.23, 4.1};
  double min, max;
  minmax(t, double* min, double* max);
  printf("%lf\n%lf\n", min, max);
  return 0;
}

【问题讨论】:

标签: c


【解决方案1】:

你想替换这一行:

minmax(t, double* min, double* max);

与:

minmax(t, &min, &max);

使用&amp; 意味着您正在传递变量的地址,这是函数minmax 所期望的(因为它使用指针,所以它期望地址)。

PS:通常,当您将数组传递给函数时,您必须将数组的大小与数组一起传递。您已将数组的大小硬编码到函数中,在这种情况下效果很好。将来,尽量记住传递数组及其大小;这是很好的 C 编码实践。

OP 评论后编辑

这里是函数,用 cmets 表示要在函数中进行的更改:

void minmax(double tomb[], double* mini , double* maxi) {
    int i;
    *mini=tomb[0]; // change here; original: mini=&tomb[0];
    *maxi=tomb[0]; // change here; original: maxi=&tomb[0];
    for(i=1; i<10; i++){
        if(tomb[i]>*maxi){
            *maxi=tomb[i]; // change here; original: maxi=&tomb[i];
        }
        if(tomb[i]<*mini){
            *mini=tomb[i]; // change here; original: mini=&tomb[i];
        }
    }
}

【讨论】:

  • hello again now it runs, but returns a gorgeus stupidness: 0.00000000 11911148967105177000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000 any idea how could i make it work?我需要打印数组的最小值和最大值。
  • @user3666276 我已经编辑了我的答案,以显示在minmax 函数中要进行的一些更改。告诉我进展如何。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 2015-06-24
  • 2013-09-18
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多