C++11 我需要如何正确地按下void指针? void func(常量字符*str) { void*s=&str; std::cout
您的main与您的函数不同,该函数有一个额外的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已经是指
&
大体上,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
已经是指向charconst 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++编写这不是一个原因。实际上,很少有理由转换成
func
中,可以考虑将其写得更明确,如*((char*)(*s))
*s
是指向str
的指针,该指针被强制转换为char*
@milbrandt您无法取消对无效*
的引用,因此*s
无效
std::cout << *static_cast<char **>(s) << std::endl;