int getIndex(int a[], int size, int value)
{
int index = 0;
while (index < size && a[index] != value)
{
++index;
}
return (index == size ? -1 : index);
}
这是一种返回数组内部值的索引的方法。我想有一个对任何尺寸都可以做到这一点的方法。如何使它通用?还是完全有可能?
您始终可以将指针传递给多维数组的第一个元素及其中所有元素的数量,即每个维度中大小的乘积。从那里开始,算法就如同一维数组。
数组中以及多维数组中的元素都保证在内存中是连续的。
返回值将是一个索引;该函数将不知道尺寸的数量及其大小。调用者必须从找到的元素的“平坦”整体索引中重建每个数组维度中的索引;例如对于a int arr[2][5]
,返回值8将对应于element arr[1][2]
。“平坦”索引和多维索引元组之间的关系(当然)是双射的。
#include<stdio.h>
#define DIM1 2
#define DIM2 5
int arr[DIM1][DIM2]; // zero-initialized
// note: for a paramater, int a[] means int *a
int getIndex(int a[], int size, int value)
{
int index = 0;
while (index < size && a[index] != value)
{
++index;
}
return (index == size ? -1 : index);
}
int main()
{
arr[1][2] = 1;
int index = getIndex(arr[0], DIM1*DIM2, 1);
if(index >= 0)
{
int dim1 = index/DIM2;
int dim2 = index%DIM2; // modulo resp. remainder
printf("found a 1 at [%d][%d]\n", dim1, dim2);
}
else
{
printf("Could not find 1 in arr\n");
}
return 0;
}
会话示例:
$ gcc -Wall -o multi-arr multi-arr.c && ./multi-arr
found a 1 at [1][2]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句