我写了以下通用函数:
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]);
有什么想法?感谢
答案 0 :(得分:1)
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]);