在C语言中将char*内存地址转换为void*并返回
我试图将char*的内存地址作为void*传递,然后将void*内存地址转换回其他地方的字符串。所以我有在C语言中将char*内存地址转换为void*并返回,c,string,pointers,memory,C,String,Pointers,Memory,我试图将char*的内存地址作为void*传递,然后将void*内存地址转换回其他地方的字符串。所以我有 char *text // text="somestring"; void *memadrs=&text; 现在我正在尝试将void*memadrs转换为新的char* 如果已经有其他相关主题,我很抱歉,但是由于我的搜索和关于指针/引用它们的混淆,我找不到任何足够相关的内容来满足这一点 为帮助干杯 编辑:对不起,各位,字符*不是常数。给定const ch
char *text // text="somestring";
void *memadrs=&text;
现在我正在尝试将void*memadrs转换为新的char*
如果已经有其他相关主题,我很抱歉,但是由于我的搜索和关于指针/引用它们的混淆,我找不到任何足够相关的内容来满足这一点
为帮助干杯
编辑:对不起,各位,字符*不是常数。给定
const char*text=“somestring”
,您确实应该使用const void*memadrs=text
强制转换到const void*
。这是因为“somestring”
是只读的以null结尾的字符串文字。请注意,您不需要使用运算符&
的地址,因为text
已经是指针类型
如果试图对char*
进行后续转换,则使用const void*
cast有助于产生编译时错误。这很有用,因为将memadrs
强制转换为char*
然后修改内存的行为是未定义的,因为原始内存是只读的
一个C标准参考以支持此操作:
[C99:6.7.3/5]:如果试图修改使用定义的对象
通过使用左值和
非常量限定类型,行为未定义
要回溯到常量字符*
,请使用(常量字符*)memadrs
我将
char-const*
切换到const-char*
只是个人喜好。任何非函数指针都可以自动转换为void*
并返回,而无需强制转换
在您的示例中,您试图将char*
(即char**
)的地址复制到void*
,这可能不是您想要的。你可能想要这个:
char const *text="somestring";
void *memadrs=text;
你可以做:
char const *text = "someString";
void *memadrs = text;
char const *newText = memadrs;
它应该通过隐式转换来完成这项工作
使用显式强制转换时,它看起来像:
char const *text = "someString";
void *memadrs = (void*)text;
char const *newText = (char const *)memadrs;
您正在获取指向指针的指针。我怀疑您想要一个与
text
值相同的指针。所以你可以
void *memadrs = text; // without &
void*
指针可以从任何类型转换到任何类型,没有任何问题,在这方面没有问题。但是你问的不太清楚?关于memadrs变量,我正在从管道中读取并将该值写入。它被预先确定为初始化为*memadrs=&text;如果您这样做,可能会收到关于丢弃const
限定符的编译器警告。要避免此类警告,您需要执行const void*memadrs=text代码>或void*memadrs=(void*)文本代码>,第二个选项更危险!