理解声明,malloc和这行C代码的其他部分

时间:2013-02-27 03:14:30

标签: c

我刚开始使用C并遇到了一行我不理解的代码。有人可以解释它的作用吗?

short int * work = (short int *) malloc(1000*16);

4 个答案:

答案 0 :(得分:5)

你究竟不明白什么?代码声明short int*,它是指向一个或多个16位(至少 16位)有符号整数的指针。它将它初始化为malloc返回的指针,该指针是一块足以容纳1000 * 16字节的内存块。

现在,为什么他们使用1000 * 16?我不知道。通常,您将按num_elements * sizeof(element)的行分配,即num_elements * sizeof(short int)

更规范地说,使用num_elements * sizeof(*work)以便在更改指针类型时代码不会中断。

另请注意it is a bad idea to cast the return value of malloc in C

答案 1 :(得分:2)

让我们分解一下:

  • short int * work

这声明了一个指向int的指针,名为work。它被声明为short int,这意味着它必须是:

  • 长度至少为16位(或两个8位字节),
  • 不大于普通int

通常,int可能过大时会使用短路。维基百科在这里有很好的C数据类型细分:http://en.wikipedia.org/wiki/C_data_types

  • = (short int *) malloc(1000*16);

这将分配1000 * 16个字节,并将其分配给指针。您可以阅读有关malloc() in the malloc() man page的更多信息。这个特定的行是坏样式的一个例子,因为:

  • 不必转换malloc的结果 - 请参阅Do I cast the result of malloc?
  • 由于标准中未定义short int的大小,因此无法保证此行生成任何特定数量的short int

最好写一下:

short int * work = malloc(sizeof(short int) * NUMBER_OF_SHORT_INTS_REQUIRED);

或者,甚至更好:

short int * work = malloc(sizeof(work[0]) * NUMBER_OF_SHORT_INTS_REQUIRED);

请务必检查以确保malloc在使用NULL执行任何操作之前未返回work

答案 2 :(得分:2)

使用malloc保留(动态=运行时)1000 * 16 = 16000字节。使用malloc得到的是指向已保留的16000字节的第一个字节的地址的指针。将结果存储到指定名为“work”的短整数的指针。通常,每个短整数的大小为2个字节,因此,malloc基本上为8000个短整数保留了空间(假设它成功)。

如果malloc无法分配空间,则返回NULL。

最后,施放malloc返回的内容是不好的做法。

答案 3 :(得分:2)

在标题中看到“声明”。

他们有一个非常好的网站用于复杂的声明。 here