【问题标题】:c - passing argument 1 from incompatible pointer type [closed]c - 从不兼容的指针类型传递参数 1 [关闭]
【发布时间】:2017-12-11 03:05:30
【问题描述】:

我有这段代码,非常简单,当我从最新的 printf 调用它时,它给了我函数 max() 的错误:

#include <stdio.h>

float max(float v[], int n){
  float maxim = v[0];
  for(int i = 0; i < n; i++){
    if(maxim < v[i]){
      maxim = v[i];
    }
  }
  return maxim;
}

void main(){
  int v[10], n;
  float x;

  for(int i = 0; i < 10; i++){
    printf("Introduza %d de 10 números: ", i+1);
    scanf(" %f", &x);
    v[i] = x;
  }

  printf("Indique o número de elementos que pretende avaliar: ");
  scanf(" %d", &n);

  printf("O maior valor introduzido entre os %d primeiros números foi %f", n, max(v,n));
}

文本是葡萄牙语,但这没关系。 错误:

warning: passing argument 1 of ‘max’ from incompatible pointer type [-Wincompatible-pointer-types]

我看到了一些线程,但我认为这是不同的。有人可以帮帮我吗?

【问题讨论】:

  • max(v,n) 中传递的v 是一个int 数组,但max 想要一个float 数组。
  • 所以 nooby :( 我怎么会错过呢?非常感谢。
  • 您可能希望在main 中使用float v[10],因为您将float x 分配给每个元素。
  • 是的,我注意到了,谢谢。把你的答案写出来,我会尽可能标记它。 :) 现在它运行完美。

标签: c arrays function pointers vector


【解决方案1】:

改变这个:

void main(){
  int v[10], n;
  float x;

收件人:

void main(){
  float v[10];
  int n;
  float x;

【讨论】:

  • void main() 充其量是main() 的依赖于实现的签名。同意标准,应为int main(void),或int main(int argc, char *argv[])
【解决方案2】:

max(v,n) 中传递的v 是一个int 数组,但max 想要一个float 数组。

您还需要在main 中使用float v[10],因为您将float x 分配给每个元素。

但我会使用double,除非你有充分的理由必须使用float

旁白:请注意main应该是

int main(void)

【讨论】:

  • 我正在使用浮点数,因为我正在练习,它要求实现接收实数向量的 float max(float v[], int n)(不知道是不是正确的术语) e 要评估的元素的数量。它返回向量的前 n 个中最大的数字。
  • 使用旧的参考资料?
  • 这本书编辑于 2013 年,第一次写于 1999 年。是的旧学校材料:D
  • 为什么main应该是'int main(void)',因为可能会出现一些错误?
  • 因为这是 2017 年 main 的定义,当时没有传递任何参数。尽管某些嵌入式代码的编译器可能不希望这样,但当main 永远不会返回到操作系统时。
猜你喜欢
  • 2018-02-27
  • 2013-12-25
  • 1970-01-01
  • 2020-06-07
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多