Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么需要取消对char指针的引用?_C_Memory_Malloc - Fatal编程技术网

为什么需要取消对char指针的引用?

为什么需要取消对char指针的引用?,c,memory,malloc,C,Memory,Malloc,我不明白为什么指针必须在这里取消引用字符*toparsest=(字符*)malloc(10)

我不明白为什么指针必须在这里取消引用<代码>字符*toparsest=(字符*)malloc(10)
char*toparsest=(char*)malloc(10)

这里并没有解引用,而是将
malloc
的值转换为
char*
。不需要浇铸,甚至应避免浇铸

要了解为什么应避免铸造:


malloc返回一个void*,因此在某些情况下强制转换是必要的,以防止编译错误

强制转换有什么好处吗?那么在什么情况下它会有用呢?@AkshaiShah这是一个风格问题,一些程序员更喜欢在他们的演员阵容中表现得清晰。另外,如果你想让它在C++中工作,它需要强制转换。@ C++中的AkshaiShah是需要的,我看到人们习惯于在那里做。但是,在C++中使用<代码> MalOC 应该是一个罕见的事件。@ MUX——你只需要在C++中工作,或者使用C编译器,它是在C++之前使用C代码编译器的。在C89之前,
malloc
返回
char*
,而不是
void*
,因此在那些日子里,如果目标类型不是
char*
,则需要强制转换。
void*
类型存在的原因是提供了一种“通用”对象指针类型,可以在不需要强制转换的情况下转换为其他对象指针类型。不,强制转换不是必需的,甚至是有害的。这是必要的,如果它是C++。链接ouua刚刚发布说明。这是不必要的铸造在C.。