有没有办法在C+;中的枚举中存储静态指针地址+; 这可能不是C++中的可能,但我不知道为什么。我一直在搜索stack overflow和google,但找不到答案

有没有办法在C+;中的枚举中存储静态指针地址+; 这可能不是C++中的可能,但我不知道为什么。我一直在搜索stack overflow和google,但找不到答案,c++,C++,首先,我将陈述我正在进行的假设 第一个假设:如果我在全局范围内有这段代码。我希望它存储在程序的数据段中,这意味着在编译时内存地址是已知的。 char const*const test1=“test1” 第二个假设:枚举值作为符号存储在符号表中 此代码编译: enum class test : size_t { TEST0 = 123, TEST1 = 456 }; 但是,如果32位机器上的大小是32位,而64位机器上的大小是64位,那么我应该能够存储指针的地址。但是,这不会编译

首先,我将陈述我正在进行的假设

第一个假设:如果我在全局范围内有这段代码。我希望它存储在程序的数据段中,这意味着在编译时内存地址是已知的。
char const*const test1=“test1”

第二个假设:枚举值作为符号存储在符号表中

此代码编译:

enum class test : size_t
{
    TEST0 = 123,
    TEST1 = 456
};
但是,如果32位机器上的大小是32位,而64位机器上的大小是64位,那么我应该能够存储指针的地址。但是,这不会编译

char const* const test1 = "test1";

enum class test : size_t
{
    TEST0 = 123,
    TEST1 = (size_t)test1
};
为什么这不起作用?test1的地址在编译时应该是已知的,它应该只是保存内存地址


这样做的目的是,我能够将地址转换回指针,并使用它将枚举转换为字符数组(即:字符串)。

test1
的地址在编译时是未知的(地址空间布局随机化会影响地址),而且在编译时它肯定是未知的(因为变量在链接之前不会在数据段中一起排列)


你的问题听起来像是XY问题。如果你有一堆独特的
char*
s,为什么要将它们塞进一个枚举中?它们已经代表了一个枚举。

地址在链接时间之前不会被固定(最多)。请将编译器错误消息包含在question@idclev463035818错误信息在这里并不重要。@斯奈特尔我同意这一点,但不重要,它不是imho。无论如何,这个问题现在是完全正确的。我要注意的是,
size\u t
可能不够大,无法存储指针。您应该使用:
intptr\t
这是一种保证足够大以容纳普通指针的整数类型。听起来OP需要一个变量数组。要么是嵌入的,要么是OP试图将通常的固定地址硬件寄存器代码样式应用于普通变量。啊,是的,链接器和地址空间布局随机化。我忘记了。Main首先,我试图实现一种简单的方法,将枚举转换为字符数组,或者反过来。我想到了汇编,我会用
db'test1'
来完成,然后只保存那个地址。@Acorn实际上没有嵌入,但我试着做类似
test1db'test1'
(asm)的事情然后使用enum作为一个奇特的容器。地址是唯一的,因此…基本上是枚举地址。但是,由于能够将该地址转换回常量char*@problem,而您无法知道确切的地址,您可以知道一些偏移量,如结构中的成员。将所有变量放入其中,然后将偏移量与是的,我可以看到在一个结构中存储东西以获得偏移量。我如何获得基?听起来像是一个运行时操作?