在C语言中将char*内存地址转换为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*的内存地址作为void*传递,然后将void*内存地址转换回其他地方的字符串。所以我有

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*)文本,第二个选项更危险!