double *f(int n, double v)
{
double *a, *p;
a = malloc(n * sizeof(double));
if (a != NULL)
for (p = a; p < a + n; p++)
*p = v;
return a;
}
你能解释一下这个功能需要什么吗?它复制了n中的v的内容吗?如果是的话,为什么会返回?我真的不明白......提前谢谢。
答案 0 :(得分:6)
它会返回一个新分配的double
数组,其大小为n
,其值为v
,如果分配失败,则返回NULL
。
这个循环:
for (p = a; p < a + n; p++)
*p = v;
使用指针算法。由于p
是指向double
的指针,递增它将指向要写入的下一个双精度数。 *p = v
将double写入指定位置。
答案 1 :(得分:3)
它分配一个n
双精度数组,将数组的每个元素初始化为v
的值。
该函数返回a
以允许调用者使用这个新分配的数组。
答案 2 :(得分:3)
double *f(int n, double v)
{
double *a, *p;
a = malloc(n * sizeof(double)); // allocate memory enough for "n" doubles (an array)
if (a != NULL) // if the allocation was successful
for (p = a; p < a + n; p++) // loop from the beginning of the array to the end
*p = v; // fill every element of the array with the value "v"
return a; // return the new array
}
所以如果我调用了这个函数:
double * myarray;
myarray = f(3, 1.3);
现在我有:
myarray[0] = 1.3
myarray[1] = 1.3
myarray[2] = 1.3
所以回答你的问题:
你能解释一下这个功能需要什么吗?
是否复制了n中的v内容?
v
是一个双精度而n
是一个int,这甚至没有意义。它使数组n
变大,并使用值v
初始化它。如果是,为什么会返回?
a
,因此您可以引用新创建的数组。 (参见上面关于如何使用它的例子)答案 3 :(得分:1)
在堆中分配n个双精度数组,用v填充它并将指针返回给它?
答案 4 :(得分:0)
将v
n次复制到float
数组在函数中分配,包含n
个float元素。
在函数的末尾,数组a
中的每个元素都包含v
作为值