C - 将int指针存储在整数中

时间:2010-11-17 13:06:23

标签: c pointers 64-bit integer

我有任何int类型的数组,需要在这个数组中存储一个指向数组另一部分的指针。

问题是,在64位系统上,指针的大小是8个字节,int的大小是4个字节,导致编译器警告(例如警告从不同大小的整数转换为指针)

我(我知道为什么编译器在呻吟,显然试图将8个字节装入4个字节并不是一个聪明的主意。问题是数组是按原样提供给我的,我必须只使用数组进行存储

4 个答案:

答案 0 :(得分:6)

如果您指的是同一个数组,为什么不只存储索引?

#include <limits>
#include <boost/static_assert.hpp>

int array[ARRAY_DIMENSION];

/**
 * the following line will cause an error at compile-time if size_t
 * is not enough to index the array.
 */

BOOST_STATIC_ASSERT(std::numeric_limits<size_t>::max() >= ARRAY_DIMENSION);

int access_array(size_t index)
{
    size_t intended_index = array[index];
    return array[intended_index];
}

答案 1 :(得分:4)

我担心无法做到。正如您所推断的那样,您无法将64位值放入32位值中。您必须提供一个intptr_t数组才能正常工作。

答案 2 :(得分:2)

不要在int s中存储指针。将指针存储在指针变量中。如果您确实需要这样做,请考虑使用一组联合。

答案 3 :(得分:0)

使用结构。

struct myint
{
    int array[10];
    int *next;
};