例如:int a[4] = {2, 4, 34}
可以说a[0]
的地址位于2000
,我们知道a[0]
元素的值为2
。
只给出一个内存地址和一个元素的值,是否可以确定元素在数组中的位置?
如果是,请提供一个如何执行此操作的示例。
答案 0 :(得分:3)
这是你在找什么?只需使用一些指针算法;
int main ()
{
int ary[] = { 1, 2, 3, 5 };
int * address_of_2 = &ary[ 1 ];
int index_of_2 = address_of_2 - ary;
return 0;
}
答案 1 :(得分:1)
对于阵列中的每个元素,内存位置都是唯一的。所以,是的,如果你知道内存位置,你可以遍历数组,只需查找引用何时等于你的值。
for (int i=0; i < arr_size; i++) {
if (&arr[i] == address && arr[i] == *address) {
cout << i << endl;
break;
}
}
答案 2 :(得分:0)
如果给定一个数组,数组的大小和元素的类型(即整数),而不是也给出了元素的地址和值,你可以对数组进行排序并找到它的位置。请注意数组块连续的重要性。
array = array;
n = sizeof(array)/sizeof(*array);
oAddress = array;
fAddress = array + n * sizeof(*array);
locOfElement = (elementAddress - oAddress) / (fAddress - oAddress) * n;