c - c中相同数据类型的多个数组的通用函数?

标签 c arrays generics

我想要一个通用函数,可以对不同大小但相同数据类型的多个数组进行操作,并且仅将数组号作为参数。让我们考虑三个数组 arr1[10]arr2[15]arr3[20]。通用函数应该是这样的:

void func(int array_number)
{
   for(int i=0; i<y; i++)
   {
     arrz[i] = i;
   }
}

这里的数组大小y将根据arrz[i]中的array_number(参数)和z来选择> 应该是 array_number (func 的参数),以便 func 将数据放入相应的数组中。用c语言可以吗? 我知道一种解决方案是在函数调用期间发送一些数字作为参数以区分数组,但我实际上不想在 func 中使用 if-else 来避免冗长的代码。

最佳答案

您的函数需要了解每个数组并根据数字选择一个数组。如果您有少量固定数量的全局数组(如示例所示),则可以使用 switch 选择一个:

void func(int array_number)
{
    int *arr;
    int len, i;

    switch (array_number) {
    case 1:
       arr = arr1;
       len = sizeof(arr1) / sizeof(arr1[0]);
       break;
    case 2:
       arr = arr2;
       len = sizeof(arr2) / sizeof(arr2[0]);
       break;
    case 3:
       arr = arr3;
       len = sizeof(arr3) / sizeof(arr3[0]);
       break;
    default:
       return;
    }

    for(int i=0; i<len; i++)
    {
      arr[i] = i;
    }
}

当然,最灵活的做法是更改函数以获取数组(技术上指向第一个元素的指针)和长度。

void func(int *arr, int len)
{
    for(int i=0; i<len; i++)
    {
      arr[i] = i;
    }
}

关于c - c中相同数据类型的多个数组的通用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44803964/

相关文章:

javascript - 如何在 react 中映射索引范围?

c# - 使用 CaSTLe 动态代理进行异步拦截

java - 将 map 声明为 Map<String, Object> 与仅 Map 相比是否有任何优势

c - C 中的无效初始值设定项

c++ - 如何使用getline从文件中读入数组

c - c中具有不同类型参数的可变参数函数

c++ - 了解函数循环中发生的事情

c# - 声明泛型类时 new() 的目的是什么?

c++ - 码 block 循环移位

c++ - C 套接字 : Echo server bad reply