我刚开始使用C并遇到了一行我不理解的代码。有人可以解释它的作用吗?
short int * work = (short int *) malloc(1000*16);
答案 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
,这意味着它必须是:
int
。 通常,int
可能过大时会使用短路。维基百科在这里有很好的C数据类型细分:http://en.wikipedia.org/wiki/C_data_types
= (short int *) malloc(1000*16);
这将分配1000 * 16个字节,并将其分配给指针。您可以阅读有关malloc()
in the malloc()
man page的更多信息。这个特定的行是坏样式的一个例子,因为:
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