#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)'发布于 2020-05-15 16:55:51
a类型为float*,返回类型为float。您需要返回一个浮动,或者将返回类型转换为指针。
发布于 2020-05-15 17:08:16
首先,您将索引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 )函数使用返回类型float声明。
float array(float a[],int n);但是函数实际上返回一个类型为float *的对象。
float array(float a[],int n )// n = size of array
{
//...
return a;
} 函数的返回类型没有多大意义。将函数声明为具有返回类型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]);
}
} 发布于 2020-05-15 17:04:18
这些错误是相当描述性的。
a作为您只需编写的第一个参数
array(a, k);注意,a[k+1]是一个不存在的元素,索引是k+1,k是最大的元素,因此这个表达式实际上调用了UB。
如果要返回整个数组,则声明函数为返回类型的float.,而不是一个float *
https://stackoverflow.com/questions/61824500
复制相似问题