C++11 我需要如何正确地按下void指针? void func(常量字符*str) { void*s=&str; std::cout

C++11 我需要如何正确地按下void指针? void func(常量字符*str) { void*s=&str; std::cout,c++11,C++11,您的main与您的函数不同,该函数有一个额外的& 大体上,ptr_1是一个void*,它指向静态的“Hello world”数组,就像str_1一样。因此,将其转换为char*是正确的 在func中,s是一个指向str的void*,s指向str的str,指向“Hello world”。因此,对char**进行强制转换是正确的。在main中,str是指向字符的指针(C字符串),ptr_1是指向某物的指针。因此,将ptr_1转换回指向charchar*的指针是可以的 在func中,参数str已经是指

您的main与您的函数不同,该函数有一个额外的
&

大体上,
ptr_1
是一个
void*
,它指向静态的
“Hello world”
数组,就像
str_1
一样。因此,将其转换为
char*
是正确的


func
中,
s
是一个指向
str
void*
s
指向
str
str
,指向
“Hello world”
。因此,对
char**
进行强制转换是正确的。

main
中,
str
是指向字符的指针(C字符串),
ptr_1
是指向某物的指针。因此,将
ptr_1
转换回指向char
char*
的指针是可以的

func
中,参数
str
已经是指向char
const char*
的常量指针。指针
s
指向
str
的地址,因此是指向指针的指针。因此,需要将其解引用两次以获取char数组的内容

<> >所使用的铸件为C型铸件。在C++中,铸造操作符<代码> COSTOSTCAST ,<代码> STATICE-CAST < /COD>,<代码> RealTytCase和<代码>动态>铸件< /代码>应优先:

void func(const char* str)
{
    void *s = &str;
    std::cout << *(char**)s << std::endl;
}

int main()
{
    char *str = "hello world";
    func(str);

    char *str_1 = "Hello world";
    void *ptr_1 = str;

    std::cout << (char*)ptr_1 << std::endl;
//    std::cout << *(char**)ptr_1 << std::endl;

    return 0;
}

<代码> STD::为什么你想在C++中这样做?因为我用C++编写这不是一个原因。实际上,很少有理由转换成 Value*/Cuff>,几乎总是有更好的解决方案。现在还不清楚你在问什么。请你的问题使问题更清楚。我想知道为什么*(char *)。-correct and(char*)-不正确,但当我在main函数中写入时,相反的-*(char**)有错误且(char*)正确。在
func
中,可以考虑将其写得更明确,如
*((char*)(*s))
*s
是指向
str
的指针,该指针被强制转换为
char*
@milbrandt您无法取消对
无效*
的引用,因此
*s
无效
std::cout << *static_cast<char **>(s) << std::endl;