我有任何int类型的数组,需要在这个数组中存储一个指向数组另一部分的指针。
问题是,在64位系统上,指针的大小是8个字节,int的大小是4个字节,导致编译器警告(例如警告从不同大小的整数转换为指针)
我(我知道为什么编译器在呻吟,显然试图将8个字节装入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;
};