正如您可以通过标题告诉我需要编写一个返回指向数组中最大数字的指针的函数,函数获取一个指向double数组及其大小的指针。另外我需要编写一个将使用此函数的main函数。 这是我写的代码:
#include <stdio.h>
#include <stdlib.h>
void BigEl(double* arr, double arrSize);
void BigEl(double* arr, double arrSize)
{
int i;
double maximum, *x;
maximum = arr[0];
for (i = 1; i < arrSize; i++)
{
if (arr[i]>maximum)
{
maximum = arr[i];
}
}
*x = maximum;
}
void main()
{
double myarr[10];
int i;
printf("Please insert 10 numbers to the array\n");
for (i = 0; i < 10; i++)
{
scanf("%d", &myarr[i]);
}
BigEl(myarr, 10);
}
我收到此错误:
Error 1 error C4700: uninitialized local variable 'x' used
我不明白我做错了什么因为我做了初始化x。 任何形式的帮助都表示赞赏,此外,请告诉我我的代码是否正确,因为我不确定我是否正确理解了这个问题。
答案 0 :(得分:4)
您没有初始化变量x
。您只需写到x
指向的位置,此处:
*x = maximum;
当x
未初始化时,这就是编译器所抱怨的。
你想要这样的东西:
double *
BigEl(double* arr, size_t arrSize)
{
size_t i;
double *max = arr;
for (i = 1; i < arrSize; i++)
if (arr[i] > *max)
max = &arr[i];
return max;
}
我改变的事情:
size_t
表示数组大小和计数器,而不是double
和int
。答案 1 :(得分:2)
你没有归还任何东西。此外,考虑数组大小为0的情况可能是好的。此外,大小应作为常量传递。没有其他答案提到这一点。
double* BigEl(double* arr, const size_t iSize)
{
if(iSize == 0)
return 0;
double max = arr[0], *x = &arr[0];
for(unsigned int i=1;i<iSize;++i){
if(arr[i] > max){
max = arr[i];
x = &arr[i];
}
}
return x;
}
答案 2 :(得分:1)
//function that returns a pointer to the largest number
double *BigEl(double* arr, int arrSize)
{
int i;
double *maximum;
maximum = &arr[0];
for (i = 1; i < arrSize; i++)
{
if (arr[i] > *maximum)
{
maximum = &arr[i];
}
}
return maximum;
}
int main(void)
{
double myarr[10];
int i;
printf("Please insert 10 numbers to the array\n");
for (i = 0; i < 10; i++)
{
scanf("%lf", &myarr[i]);
}
printf("%f\n", *BigEl(myarr, 10));
return 0;
}
答案 3 :(得分:1)
您对*x
的作业不正确 - 您说的是{&#34;指定x
指向的位置,而不是先说明它在哪里。除此之外,还有其他一些问题:
#include <stdio.h>
#include <stdlib.h>
// return pointer to location from function
double * BigEl(double* arr, double arrSize)
{
int i;
// initialise both variables
double maximum = arr[0], *max_pos = arr;
for (i = 1; i < arrSize; i++)
{
if (arr[i]>maximum)
{
maximum = arr[i];
// assign address here
max_pos = &arr[i];
}
}
// return address
return max_pos;
}
int main()
{
double myarr[10];
double * max_pos;
int i;
printf("Please insert 10 numbers to the array\n");
for (i = 0; i < 10; i++)
{
scanf("%lf", &myarr[i]);
}
// use return value here
max_pos = BigEl(myarr, 10);
return 0;
}
答案 4 :(得分:0)
我需要编写一个将指针返回到最大值的函数 数组中的数字
我认为你需要接下来的
#include <stdio.h>
double * largest_element( const double *a, int n )
{
const double *largest = a;
int i;
for ( i = 1; i < n; i++ )
{
if ( *largest < a[i] ) largest = a + i;
}
return ( double *)largest;
}
#define N 10
int main(void)
{
double a[N];
int i;
printf("Please insert %d numbers to the array: ", N );
for ( i = 0; i < N; i++ )
{
scanf( "%lf", &a[i] );
}
printf( "\nThe largest element of the array is %lf\n", *largest_element( a, N ) );
return 0;
}
如果要输入例如
2.2 1.5 5.2 1.8 3.9 5.9 7.7 6.8 2.9 0.8
然后程序输出
The largest element of the array is 7.700000