-3

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

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

4 回答 4

5

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

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

更规范地说,num_elements * sizeof(*work)如果您更改指针的类型,请使用这样您的代码不会中断。

另请注意,将 malloc 的返回值转换为 C 是一个坏主意

于 2013-02-27T03:17:25.730 回答
2

让我们分解一下:

  • short int * work

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

  • 长度至少为 16 位(或两个 8 位字节),并且
  • 不比平原大int

通常,当 aint可能太大时,使用短裤。维基百科在此处对 C 数据类型进行了出色的细分: http ://en.wikipedia.org/wiki/C_data_types

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

这会分配 1000*16 字节,并将其分配给指针。malloc() 您可以在malloc()手册页中阅读更多信息。这条特定的行是不良风格的一个例子,因为:

  • 没有必要强制转换 malloc 的结果 - 请参阅Do I cast the result of malloc?
  • 因为short int标准中没有定义 a 的大小,所以不能保证这条线会产生任何特定数量的short ints。

最好改为写:

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.

于 2013-02-27T03:21:01.430 回答
2

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

如果 malloc 未能分配空间,则返回 NULL。

最后,强制转换 malloc 返回的内容是不好的做法。

于 2013-02-27T03:23:34.763 回答
2

在您的标题中看到“声明”。

他们有一个非常好的复杂声明网站。这里

于 2013-02-27T04:23:51.963 回答