这里考虑以下代码示例:
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/