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 的内容?如果是,为什么它返回一个?我真的不明白...提前谢谢。
它返回一个新分配double
的大小数组,其中n
填充了 value v
,或者NULL
如果分配失败。
这个循环:
for (p = a; p < a + n; p++)
*p = v;
使用指针算法。作为p
指向 a 的指针double
,递增它将指向下一个要写入的双精度数。*p = v
在指定位置写入双精度。
它分配一个双精度数组,将数组的n
每个元素初始化为 的值v
。
函数返回a
以允许调用者使用这个新分配的数组。
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
精度整数,这甚至没有意义。它使数组n
变大并使用 value 对其进行初始化v
。If yes, why does it return a?
a
so you have a reference to the newly created array. (see example above on how it could be used)它分配一个字节的内存区域并用值n * sizeof(double)
填充它v
在堆中分配一个 n 双精度数组,用 v 填充它并返回指向它的指针?
将 n 次复制v
到浮点数组中
该数组在函数中分配并包含n
浮点元素。
在函数的末尾,数组中的每个元素a
都包含v
为值