gpt4 book ai didi

c - 在 C 中接受任何数字类型的函数

转载 作者:太空宇宙 更新时间:2023-11-04 03:18:49 25 4
gpt4 key购买 nike

我正在尝试用 C 构建一个程序,它可能会接收任何类型的数字数组和一个要在数组中搜索的数字,并将返回它的位置。目前,我在 func 函数的第 3 行收到“错误:void 表达式的无效使用”错误。我试图解决问题的方式是否相关?如果不是,我想尽可能通用的解决方案应该是什么?

代码如下:

void func(int,void*,double,int);
int main(){
/* arrays and numbers to search in each array*/
int arrInt[]={3,4,5,15,6,24,7,13,12};
double arrD[]={1.1,1.4,1.5,2.2,7.6,10.2};
long arrL[]={10,20,30,40,50,60};
int i2s=7;
double d2s=7.6;
long l2s=40;

func(sizeof(int*),arrInt,i2s,9);
func(sizeof(double*),arrD,d2s,6);
func(sizeof(long*),arrL,l2s,6);

}

void func(int size,void *arr,double num,int arrSize){
int i;
for(i=0;i<arrSize;i++){
if((double*)*arr==num)
return i+1;
arr=arr+size;
}
return -1;
}

最佳答案

在以下条件中取消引用 void* 会触发错误:

 if((double*)*arr==num)

此外,对 void* 进行指针运算也不符合标准。

即使您修复语法以在 指针转换后取消引用,除非您实际传递一个double 数组,否则比较将失败,因此您需要更改方法.

您可以通过将指针传递给搜索项并使用 memcmp 进行比较来解决此问题:

int func(size_t size, void *arr, void* pnum, size_t arrSize) {
for (int i=0 ; i != arrSize ; i++, arr = ((char*)arr)+size ) {
if(memcmp(arr, pnum, size)==0)
return i+1;
}
return -1;
}

请注意,现在您需要在调用中使用地址运算符 &,即

int x = func(sizeof(int), arrInt, &i2s, 9);

Demo.

关于c - 在 C 中接受任何数字类型的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48648758/

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