我们怎样才能找出数组中哪个元素的地址和值来自c ++

时间:2015-07-05 23:30:40

标签: c++ arrays pointers

例如:int a[4] = {2, 4, 34}

可以说a[0]的地址位于2000,我们知道a[0]元素的值为2

只给出一个内存地址和一个元素的值,是否可以确定元素在数组中的位置?

如果是,请提供一个如何执行此操作的示例。

3 个答案:

答案 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;