无法将 '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)'
a
是float*
类型,return是float
类型。您要么需要 return 一个 浮动,要么将 return 类型转换为指针。
错误描述性很强。
- 要将
a
作为第一个参数传递,您只需编写
array(a, k);
注意a[k+1]
是一个不存在的元素,索引k+1
,k
是最大的一个,所以这个表达式实际上调用了一个UB。
- 如果要 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]);
}
}
#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)'
a
是float*
类型,return是float
类型。您要么需要 return 一个 浮动,要么将 return 类型转换为指针。
错误描述性很强。
- 要将
a
作为第一个参数传递,您只需编写
array(a, k);
注意a[k+1]
是一个不存在的元素,索引k+1
,k
是最大的一个,所以这个表达式实际上调用了一个UB。
- 如果要 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]);
}
}