Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.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 32位(void*)通用(32位操作系统)能否用于存储uint64\t数据?_C_Linux - Fatal编程技术网

C 32位(void*)通用(32位操作系统)能否用于存储uint64\t数据?

C 32位(void*)通用(32位操作系统)能否用于存储uint64\t数据?,c,linux,C,Linux,对于C中的泛型数据类型,使用void指针是一种可移植的方法吗(假设我不想使用预处理器宏或联合类型)?出现此问题的原因是,假设我想在32位Linux发行版(=>sizeof(void*)=4字节)中的void指针中存储uint64_t数据,将uint64_t键入(void*)是否安全为了传递给函数,然后稍后将其键入回uint64以检索数据?在“void*中存储uint64\t数据”或在“指向void的指针”中存储任何其他类型的数据的常用方法是使该指针指向类型为uint64\t的对象(或任何其他所需

对于C中的泛型数据类型,使用void指针是一种可移植的方法吗(假设我不想使用预处理器宏或联合类型)?出现此问题的原因是,假设我想在32位Linux发行版(=>sizeof(void*)=4字节)中的void指针中存储uint64_t数据,将uint64_t键入(void*)是否安全为了传递给函数,然后稍后将其键入回uint64以检索数据?

在“
void*
中存储
uint64\t
数据”或在“指向void的指针”中存储任何其他类型的数据的常用方法是使该指针指向类型为
uint64\t
的对象(或任何其他所需类型),让那个对象保持这个值


这对某些人来说似乎太明显了,但它至少每周都会出现堆栈溢出,特别是在
pthread\u create
pthread\u join
的API中,你应该让指针指向回调中可能需要的所需数据。

A
void*
用于存储
地址
可以容纳任何大小的类型。它不是用来存储不代表内存地址的整数值的

如果您想在没有指针的单一类型中存储多个不同大小的类型,请考虑使用EnUM复合类型。这种类型将使用两个32位整数在32位系统上工作

enum 32_or_64_int_t {
      UINT32_TYPE,
      UINT64_TYPE
};

struct 64_int_t {
    uint32_t value[2];
    enum 32_or_64_int_t type;
};

如果您想做更多的事情而不仅仅是存储它,您仍然需要使用这种方法实现64位算术和其他操作。

不,这不安全。您将只拥有原始数字64位中的32位。重新思考你想做的事情。如果<代码> siZoof(空洞*)<代码>是4字节,又名32位,它就不能存储64位信息。@ InnocentBystander和C++ +NuntBysDAND完全无关,但很酷的一点是:比亚恩·斯特劳斯特鲁普是我父亲大学里的首批教授之一。你可能会把指向数据的指针和存储数据的指针混淆了。
void
指针可以指向任何类型和大小的数据,这就是它被称为通用指针的原因。但它只能存储尽可能多的位。