我刚开始使用 C,遇到了一行我不明白的代码。有人可以解释它的作用吗?
short int * work = (short int *) malloc(1000*16);
你不明白什么?代码声明了short int*
一个指向一个或多个 16 位(至少16 位)有符号整数的指针。它将它初始化为由 返回的指针malloc
,这是一块足够大以容纳1000 * 16
字节的内存。
现在,他们为什么使用1000 * 16
? 我不知道。通常,您会按照num_elements * sizeof(element)
,即 ,进行分配num_elements * sizeof(short int)
。
更规范地说,num_elements * sizeof(*work)
如果您更改指针的类型,请使用这样您的代码不会中断。
让我们分解一下:
short int * work
这声明了一个指向 的指针int
,称为work
。它被声明为 a short int
,这意味着它必须是:
int
。通常,当 aint
可能太大时,使用短裤。维基百科在此处对 C 数据类型进行了出色的细分: http ://en.wikipedia.org/wiki/C_data_types
= (short int *) malloc(1000*16);
这会分配 1000*16 字节,并将其分配给指针。malloc()
您可以在malloc()
手册页中阅读更多信息。这条特定的行是不良风格的一个例子,因为:
short int
标准中没有定义 a 的大小,所以不能保证这条线会产生任何特定数量的short int
s。最好改为写:
short int * work = malloc(sizeof(short int) * NUMBER_OF_SHORT_INTS_REQUIRED);
或者,甚至更好:
short int * work = malloc(sizeof(work[0]) * NUMBER_OF_SHORT_INTS_REQUIRED);
NULL
在对work
.
您正在使用 malloc 保留(动态 = 在运行时)1000 * 16 = 16000 字节。使用 malloc 得到的是一个指针,指向已保留的 16000 个字节的第一个字节的地址。您将结果存储到名为“work”的短整数的指针中。通常,每个短整数的大小为 2 个字节,因此,基本上 malloc 为 8000 个短整数保留了空间(假设它成功了)。
如果 malloc 未能分配空间,则返回 NULL。
最后,强制转换 malloc 返回的内容是不好的做法。
在您的标题中看到“声明”。
他们有一个非常好的复杂声明网站。这里