c - 使用 malloc() 分配内存块

标签 c arrays pointers malloc

<分区>

我有一个很不寻常的问题。 我见过将参数传递给 malloc 的两种变体。假设我们有:

int *arr = (int *) malloc(sizex * sizeof(*arr));

有些人说使用 sizeof(*arr) 不好,您应该改用 sizeof(int)(在本例中)。 您能解释一下有什么区别以及使用什么更好吗?

最佳答案

没有区别。两者分配相同数量的内存 -

int *arr = (int *) malloc(sizex * sizeof(*arr));
// equivalent to
int *arr = (int *) malloc(sizex * sizeof(int));

但是,有一些事情需要注意。

  1. 您不应该强制转换 malloc 的结果。它没有用,如果您忘记包含包含其原型(prototype)的 header stdlib.h,实际上可能会导致问题。请阅读此 - Do I cast the result of malloc?

  2. 我更喜欢上面的第一个版本,因为类型信息没有重复。此外,从某种意义上说,它更易于维护,如果您更改类型,则只需更改一次,而在第二种情况下,您需要在两个地方进行更改。

需要注意的是,sizeof 只有当它是一个类型时,它的操作数才需要括号。因此,可以更简洁地写成

int *arr = malloc(sizex * sizeof *arr); 
// equivalent to
int *arr = malloc(sizex * sizeof(*arr));  // preferred way

关于c - 使用 malloc() 分配内存块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23277336/

相关文章:

c - 使用 if 语句打印数组中的最后一个元素

c++ - 指针输出的虚拟值

c - 为什么 pthread_join 在最后一次迭代中失败(给出段错误)?

c++ - 从基本/父数组调用子成员?

c++ - Windows 中的 C++ 何时需要 "extern C "?

java - java中二维数组如何按字母顺序排序

php - 获取具有逗号分隔值的多维数组中的条目计数 - php

带指针的 Objective-C 转换

android - 一个线程中的崩溃如何影响其他线程。

c - realloc 后如何释放内存