c - 将多维数组与通用函数一起使用

标签 c arrays generic-programming

我编写了以下通用函数:

void* scramble(void* arr, int ElemSize, int n, int* indArr){
    void * res = malloc(n * ElemSize);
    int i;

    for (i = 0 ; i < n ; i++)
        memcpy((BYTE*)res+i*ElemSize, (BYTE*)arr+indArr[i]*ElemSize, ElemSize);

    return res;
}

该函数获取一个数组、每个元素的大小以及数组中元素的数量。
indArr 是一个数组,其索引以任意顺序从 0 到 n-1 运行。
该函数返回根据 indArr 排列的新数组。

如何使用它来处理二维数组(或更多)?我尝试了这个,但它不起作用:

int indArr[] = {2, 0, 1};
char names[][10] = {{"David"}, {"Daniel"}, {"Joni"}};
char **res;

res = (char**)scramble(names, sizeof(char*), 3, indArr);

for (i = 0 ; i < 3 ; i++)
    printf("%s ", res[i]);

有什么想法吗?谢谢

最佳答案

names 是一个数组的数组。

扰码器引用外部数组。后者的元素是“字符串”。每个字符串的大小为10

所以像这样调用扰码器:

res = (char**)scramble(names, 10, 3, indArr);

res = (char**)scramble(names, sizeof(*names), 3, indArr);
<小时/>

更新:

为了能够访问内部数组的单个元素,请执行以下操作:

char (*res)[10] = (char (*)[10]) scramble(names, sizeof(*names), 3, indArr);

for (int i = 0; i < 3; ++i)
  printf("res[%d] = '%s'\n", i, res[i]);

关于c - 将多维数组与通用函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18980722/

相关文章:

javascript - 返回数组中的每个 DOM 元素

c++ - 编写通用包装器 : Conditionally Map different Types from Template Arguments onto a Single Class-Internal Type

haskell - 索引到容器 : the mathematical underpinnings

java - 来自不同类的同名调用方法

c - 在 valgrind 下运行时读取无效

c++ - Libudev 和 AT 命令

c - OpenCL 中并行 Floyd Warshall 算法的输出错误

c - 选择 int 中的所有其他数字

c - 在 C 中从表中分配指针时遇到问题

java - 查找两个一维数组的并集、交集和差集