Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-将int指针存储在整数中_C_Pointers_64 Bit_Integer - Fatal编程技术网

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

C-将int指针存储在整数中,c,pointers,64-bit,integer,C,Pointers,64 Bit,Integer,我有任何int类型的数组,需要在这个数组中存储指向数组另一部分的指针 问题在于,在64位系统上,指针的大小为8字节,int的大小为4字节,这会导致编译器发出警告(例如,从不同大小的整数转换为指针的警告) 我(我理解编译器为什么在呻吟,显然试图将8字节放入4字节不是一个聪明的想法。问题是数组是按原样提供给我的,我必须只使用数组来存储。 < P>不要存储指针中的指针:INTINGINTING/CONTRONS指针指针中的S.存储指针。如果你真的需要这样做,考虑使用ARRAA。联合体的y。使用结构 s

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

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


我(我理解编译器为什么在呻吟,显然试图将8字节放入4字节不是一个聪明的想法。问题是数组是按原样提供给我的,我必须只使用数组来存储。

< P>不要存储指针中的指针:INTINGINTING/CONTRONS指针指针中的S.存储指针。如果你真的需要这样做,考虑使用ARRAA。联合体的y。

使用结构

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

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

#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];
}
#包括
#包括
int数组[array_DIMENSION];
/**
*如果大小\u t
*不足以索引数组。
*/
BOOST\u STATIC\u ASSERT(std::numeric\u limits::max()>=ARRAY\u DIMENSION);
整数存取数组(大小索引)
{
size\u t\u index=数组[索引];
返回数组[预期的_索引];
}

恐怕不行。正如您正确推断的那样,您无法将64位值放入32位值中。必须为您提供一个数组才能正常工作。

您能解释一下以后如何读取数组,以区分指针元素和int元素吗?您能提供一个c吗ode示例?请再次注意,在64位系统上,您可能无法将索引放入
int
。但是,您可以将其放入两个
int
,即高部分和低部分(或者,一般来说,无论平台上需要多少int,但提出此问题的人通常不会编写可移植代码)。是的,OP可以在编译时检查数组的大小。如果数组中的索引太大,无法容纳32位无符号整数,则数组(每个元素至少包含一个无符号整数)至少需要16 GB。这在64位系统上不是不可能的,但不太可能。无论如何,使用
size\u t
而不是
int
,问题就会消失。不需要断言,因为
size\u t
被定义为足够大,可以容纳任何对象的大小和
数组的大小使用专门为此而设计的C99类型时,不能使用
>=ARRAY\u DIMENSION
+1。请确保
#也包括