无法将 'float*' 转换为 'float'

cannot convert 'float*' to 'float'

#include<math.h>
#include<stdio.h>
#include<stdlib.h>

float array(float a[],int n);

int main() {
    int k=5;
    float a[k+1];
    array(a[k+1],k);
}

float array(float a[],int n )// n = size of array
{
    printf("enter elements in order of increasing:\n");
    for(int i=0;i<n;i++) {
        printf("array[%d]:",i);
        scanf("%f",&a[i]);  
    }
    return a;
}                                   

我想构建一个程序,使用一个函数来给出一个浮点数递增的数组,但它有一个错误,编译器显示这些错误:

[Error] cannot convert 'float*' to 'float' in return9
[Error] cannot convert 'float' to 'float*' for argument '1' to 'float array(float*, int)'

afloat*类型,return是float类型。您要么需要 return 一个 浮动,要么将 return 类型转换为指针。

错误描述性很强。

  1. 要将 a 作为第一个参数传递,您只需编写
    array(a, k);

注意a[k+1]是一个不存在的元素,索引k+1k是最大的一个,所以这个表达式实际上调用了一个UB。

  1. 如果要 return 整个数组,请将函数声明为具有 return 类型的 float *,而不是单个 float.

对于初学者,您将索引为 k + 1 的数组中不存在的元素传递给函数

array(a[k+1],k);

表达式 a[k+1] 的类型为 float,而函数需要一个类型为 float * 的对象。你需要像

这样调用函数
array( a, k + 1 );
      ^^^ ^^^^^ 

也因为实际上是用 k+1 元素声明的数组。

float a[k+1];

但是不清楚为什么变量 k 是用初始值设定项 5 声明的,而数组是用 k + 1 个元素声明的,即有 6 个元素。如果元素的数量等于 k 的值,那么逻辑上会更一致。例如

int k = 5; // or int k = 6
float a[k];
array( a, k )

函数声明为 return 类型 float

float array(float a[],int n);

但函数实际上 return 是一个 float *.

类型的对象
float array(float a[],int n )// n = size of array
{
    //...
    return a;
}  

函数的return类型没有多大意义。将函数声明为 return 类型 void.

void array(float a[],int n);

//...

void array(float a[],int n )// n = size of array
{
    printf("enter elements in order of increasing:\n");
    for(int i=0;i<n;i++) {
        printf("array[%d]:",i);
        scanf("%f",&a[i]);  
    }
}