malloc() 可以用来定义数组的大小吗?

标签 c arrays pointers malloc

这里考虑以下代码示例:

int *a = malloc(sizeof(int) * n);

这段代码可以用来定义一个包含n个整数的数组a吗?

最佳答案

int *a = malloc(sizeof(int) * n);

Can this code be used to define an array a containing n integers?

这取决于你所说的“定义一个数组”是什么意思。

像这样的声明:

int arr[10];

定义一个命名数组对象。您的指针声明和初始化没有。

但是,malloc 调用(if 它成功并返回非NULL 结果,并且if n > 0) 将在运行时创建一个匿名数组对象。

但它并没有“定义一个数组a”。 a 是一个指针 对象的名称。如果 malloc 调用成功,a 将指向数组对象的初始元素,但它本身不是数组。

请注意,由于数组对象是匿名的,因此您无法对其应用 sizeof,也无法从指针检索数组对象的大小。如果您需要知道数组有多大,您需要自己跟踪它。

(一些评论表明 malloc 调用分配的内存可以容纳 n 整数对象,但不是数组。如果是这种情况,那么你不会无法访问创建的数组对象的元素。请参阅 N1570 6.5.6p8 了解指针添加的定义,以及 7.22.3p1 了解 malloc 调用如何创建一个可访问数组。)

关于malloc() 可以用来定义数组的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41512872/

相关文章:

c - CRC16 CCITT 上下文中的截断多项式意味着什么

c - X64 程序集 : terminated by signal SIGBUS (Misaligned address error)

c - 执行 shell : wrong argument in execvp()

计算数组元素的总和

javascript - 比较两个表并不总是有效

javascript - PHP:从数据列表中打印(循环困难)

c - "cannot convert to a pointer type"通过指针访问结构

c++ - 我可以将指向派生类字段的指针传递给 super 构造函数的 super 构造函数不使用该指针吗?

c - 在 C 中传递异常数量的函数参数如何仍能按预期工作?

c++ - C/C++ 中的变量如何工作?