C 函数返回指向数组中最大数字的指针
从标题可以看出,我需要编写一个函数,返回一个指向数组中最大数字的指针,函数得到一个指向双精度数组的指针及其大小。此外,我需要编写一个主函数来使用这个函数。 以下是我编写的代码:C 函数返回指向数组中最大数字的指针,c,arrays,function,pointers,C,Arrays,Function,Pointers,从标题可以看出,我需要编写一个函数,返回一个指向数组中最大数字的指针,函数得到一个指向双精度数组的指针及其大小。此外,我需要编写一个主函数来使用这个函数。 以下是我编写的代码: #include <stdio.h> #include <stdlib.h> void BigEl(double* arr, double arrSize); void BigEl(double* arr, double arrSize) { int i; double max
#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);
}
我不明白我做错了什么,因为我初始化了x。
感谢您提供的任何帮助。此外,请告诉我代码的想法是否正确,因为我不确定我是否正确理解了问题。您没有初始化变量x。您只需将x指向的位置写到 当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\u t,而不是double和int。
保留指向最大元素的指针,而不是最大元素的值。
返回指向最大元素的指针。
拆下superflous支架。
你什么也不退。另外,最好考虑数组大小为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;
}
您对*x的赋值不正确-您说的是“分配到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;
}
我需要写一个函数,返回一个指向最大值的指针
数组中的数字
我想你需要以下几点
#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;
}
然后程序输出将是
The largest element of the array is 7.700000
您没有从函数返回任何内容。@haccks虽然为true,但这并不是生成编译器错误的原因,编译器错误是OP的问题。顺便说一句%dint@abligh; 我没那么说。我的评论是对标题的回应。OT:至少是int mainvoid。为了完整性,应该提到,对于数组索引,类型size\u t是首选。您的代码对于负数的大小仍然会失败。@Amnon Hanuhov您是什么意思?!我输入4个数字,它完成扫描,假设扫描10次,但是如果我输入整数,它会扫描10次。再加上它打印了一个奇怪的数字。没关系,我犯了一个我没有注意到的小错误。
#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;
}
#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