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

4

6 回答 6

6

它返回一个新分配double的大小数组,其中n填充了 value v,或者NULL如果分配失败。

这个循环:

for (p = a; p < a + n; p++)
    *p = v;

使用指针算法。作为p指向 a 的指针double,递增它将指向下一个要写入的双精度数。*p = v在指定位置写入双精度。

于 2013-01-15T15:33:18.843 回答
3

它分配一个双精度数组,将数组的n每个元素初始化为 的值v

函数返回a以允许调用者使用这个新分配的数组。

于 2013-01-15T15:33:34.180 回答
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精度整数,这甚至没有意义。它使数组n变大并使用 value 对其进行初始化v

If yes, why does it return a?

  • It returns a so you have a reference to the newly created array. (see example above on how it could be used)
于 2013-01-15T15:37:41.233 回答
1

它分配一个字节的内存区域并用值n * sizeof(double)填充它v

于 2013-01-15T15:34:22.447 回答
1

在堆中分配一个 n 双精度数组,用 v 填充它并返回指向它的指针?

于 2013-01-15T15:34:26.773 回答
0

将 n 次复制v到浮点数组中

该数组在函数中分配并包含n浮点元素。

在函数的末尾,数组中的每个元素a都包含v为值

于 2013-01-15T15:34:14.163 回答