我正在尝试学习C中的malloc。我已经完成了一些java编程,但想学习编码的细节。
让我解释一下我对此的了解,希望有人可以填补空白。
在行中:
str = (char *) malloc(15);
我知道我们在这里做的是为这个字符串分配内存。 15个单元的内存,我假设15个单元是15个字节,因为1个字符占用一个字节(是吗?)
令我困惑的是(char *)这是什么意思?我知道*是指针和去引用运算符,但我在这种情况下意味着什么。
根据我在编程方面的有限经验,我的第一个猜测是(char *)是一个明确的演员..但我不确定。
我道歉,如果以前曾经问过这个问题,但是我已经搜索了,而且我也搜索了(char *)和我在其他例子中见到的像(int *)这样的变体,但似乎无法得到一个解释
最值得赞赏的任何帮助。
答案 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 ++编译器编译代码。