这个C函数有什么作用?

时间:2013-01-15 15:31:49

标签: c function

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的内容吗?如果是的话,为什么会返回?我真的不明白......提前谢谢。

5 个答案:

答案 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作为值