为什么需要取消对char指针的引用?
我不明白为什么指针必须在这里取消引用<代码>字符*toparsest=(字符*)malloc(10)有人有什么想法吗?为什么需要取消对char指针的引用?,c,memory,malloc,C,Memory,Malloc,我不明白为什么指针必须在这里取消引用字符*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.。