在行中:str =(char *)malloc(15); (char *)是什么意思?

时间:2014-08-16 03:42:13

标签: c string pointers

我正在尝试学习C中的malloc。我已经完成了一些java编程,但想学习编码的细节。

让我解释一下我对此的了解,希望有人可以填补空白。

在行中:

str = (char *) malloc(15);

我知道我们在这里做的是为这个字符串分配内存。 15个单元的内存,我假设15个单元是15个字节,因为1个字符占用一个字节(是吗?)

令我困惑的是(char *)这是什么意思?我知道*是指针和去引用运算符,但我在这种情况下意味着什么。

根据我在编程方面的有限经验,我的第一个猜测是(char *)是一个明确的演员..但我不确定。

我道歉,如果以前曾经问过这个问题,但是我已经搜索了,而且我也搜索了(char *)和我在其他例子中见到的像(int *)这样的变体,但似乎无法得到一个解释

最值得赞赏的任何帮助。

3 个答案:

答案 0 :(得分:7)

这是演员,将malloc的输出转换为char *

C中的必要或可取来从malloc转换回报。

答案 1 :(得分:2)

Malloc只是尝试以字节为单位分配一定量的内存,如果成功则返回指向该内存块开头的指针,如果失败则返回NULL。在C中,char总是一个字节,与您在Java中看到的不同。从malloc返回的类型是void*(即没有类型)。转换为char*只是使类型匹配您想要的但是多余的,因为类型将自动为您转换。事实上,您可能不想在C中进行明确的演员表,请参阅此答案以了解更多相关信息:https://stackoverflow.com/a/605858/296460

请注意,与C语言不同,在C ++中void*与其他指针类型不兼容,因此如果您没有明确强制转换,则会出错。这是C和C ++不兼容语言的一个例子。问题中的代码示例似乎是采用C ++中的约定,然后在C中使用它,这是一个很好的避免。

答案 2 :(得分:0)

在C中,您不需要转换malloc的返回值。 malloc返回的void指针会自动转换为正确的类型。

str = (char *) malloc(15);

它只是投射而C没有必要。但是人们会投,因为 如果您希望使用C ++编译器编译代码。