我试图将char *的内存地址作为void *传递,然后将void *的内存地址转换回其他地方的字符串。所以我有,
char *text // text="somestring";
void *memadrs=&text;
现在,我正在尝试从空*备忘录转换为新的字符*。
对于是否已经有其他相关主题,我深表歉意,但是由于我对指针/引用它们的搜索和困惑,我找不到足够相关的东西来满足此要求。
为帮助加油!
编辑:对那些困惑的人表示抱歉,char *不是常数。
鉴于const char* text = "somestring"
您确实应该const void*
使用const void* memadrs = text
。这是因为"somestring"
它是只读的以空值结尾的字符串文字。注意,&
由于text
已经是指针类型,因此不需要使用address-of运算符。
const void*
如果char*
尝试进行后续的强制转换,则使用强制转换有助于产生编译时错误。这很有用,因为由于原始内存是只读memadrs
的char*
,因此在转换为a然后修改内存时的行为将是不确定的。
AC标准参考以对此进行备份:
[C99:6.7.3 / 5]:如果尝试通过使用具有非const限定类型的左值来修改以const限定类型定义的对象,则该行为未定义。
要回退到a const char*
,请使用(const char*)memadrs
。
我的切换char const*
到const char*
仅仅是个人喜好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句