-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

valueで満たされたdoubleサイズの新しく割り当てられた配列を返すか、割り当てが失敗した場合。nvNULL

このループ:

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

ポインター演算を使用します。pへのポインターと同様にdouble、それをインクリメントすると、次に書き込む double がポイントされます。*p = v指定された位置に double を書き込みます。

于 2013-01-15T15:33:18.843 に答える
3

doubleの配列を割り当て、配列の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

だからあなたの質問に答えるために:

この機能が何のために必要なのか説明してもらえますか?

  • double の配列を割り当てて初期化します。

v の内容を n にコピーしますか?

  • いいえ。vが double でnint であることを考慮すると、意味がありません。配列をn大きくし、値で初期化しますv

はいの場合、なぜ a を返すのですか?

  • 返さaれるので、新しく作成された配列への参照があります。(使用方法については上記の例を参照してください)
于 2013-01-15T15:37:41.233 に答える
1

バイトのメモリ領域を割り当て、値n * sizeof(double)で完全に埋めますv

于 2013-01-15T15:34:22.447 に答える
1

ヒープに n 個の double の配列を割り当て、v で埋めて、それへのポインターを返しますか?

于 2013-01-15T15:34:26.773 に答える
0

n 回複製してvfloat の配列にする

配列は関数で割り当てられ、nfloat 要素を含みます。

関数の最後に、配列の各要素が値としてa含まれていますv

于 2013-01-15T15:34:14.163 に答える