我有一个void指针,必须保存一些信息,我想根据我的枚举将它分配给一个int。我希望这个整数一直可用,以便void指针不指向“垃圾”。 这是代码:
enum type {nc, ns, nd};
void* thatType;
thatType = &nc
结果是,我得到了这个错误:表达式必须是左值或函数指示符 那么“nc”是一个实际的变量还是就像0的整数占位符一样? 如果我这样做了:
thatType = (int*)nc
首先,为什么这不会给我一个错误呢?
答案 0 :(得分:0)
这是两件非常不同的事情。
&nc
这是试图获取一个枚举器的地址,但是枚举器不是对象,也没有地址。这就像尝试写&42
来获取文字42
的地址一样。只有字符串文字才有地址(或多或少)。
(int*)nc
另一方面,这是取整数值nc
(即0
)并将其转换为指针。基本上你是在写(int*)nullptr
。这是合法的,虽然有问题(这就是为什么,在C ++演员阵容中,只有reinterpret_cast
会在这里编译)。
特别注意您没有写(int*)&nc
。
它是否像占位符一样工作为0的整数?
基本上,是的,那是对的。