gpt4 book ai didi

c - 使用通用函数查找最大值

转载 作者:行者123 更新时间:2023-11-30 18:38:45 25 4
gpt4 key购买 nike

我正在为自己编写一些东西,我想编写简单的通用函数,它可以在数组中找到最大值。

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

//Pass array pointer, array length and size of element
void *getMaxAdr(void *array, int length, size_t size)
{
char *maxAdr = (char*) malloc (size);

int i = 0;
for (i = 0; i < length; i++)
{
if (memcmp(maxAdr, array + i*size, size) < 0)
maxAdr = (char *) array + i*size;
}

return maxAdr;
}

int main()
{
int iarray[] = {3, 4, 1, 5, 2};
char charray[] = {'A', 'C', 'E', 'B', 'D'};
float farray[] = {2.2, 5.5, 3.3, 4.4, 1.1};
double darray[] = {11.11, 22.22, 55.55, 33.33, 44.44};
void *pMax;

pMax = getMaxAdr(iarray, 5, 4);
printf("\n%d\n", *(int *) pMax);

pMax = getMaxAdr(charray, 5, 1);
printf("\n%c\n", *(char *) pMax);

pMax = getMaxAdr(farray, 5, 4);
printf("\n%1.1f\n", *(float *) pMax);

pMax = getMaxAdr(darray, 5, 8);
printf("\n%2.2f\n", *(double *) pMax);

return 0;
}

函数对于整数和字符工作得很好,但是当我传递 float 数组时,它返回 float 4.4 和 double 44.44。我缺少什么?谢谢。

最佳答案

你的代码没有意义; memcmp() 应该如何计算大于字节的最大值?请注意its return value只告诉您前两个不同的字节之间的关系。这不适用于 float 据类型,也不适用于整数,除非您假设采用大尾数法。所以,简而言之,这是行不通的。

您必须使用正确的类型和实际的比较运算符来获取正确的代码。它不会很漂亮,但用 C 编写相当通用的代码并不容易。

此外,您对 maxAdr 的处理完全没有意义,并且会泄漏内存。

关于c - 使用通用函数查找最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32758370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com