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の内容をコピーしますか?はいの場合、なぜそれが返されるのですか?本当にわからない…よろしくお願いします。
valueで満たされたdouble
サイズの新しく割り当てられた配列を返すか、割り当てが失敗した場合。n
v
NULL
このループ:
for (p = a; p < a + n; p++)
*p = v;
ポインター演算を使用します。p
へのポインターと同様にdouble
、それをインクリメントすると、次に書き込む double がポイントされます。*p = v
指定された位置に double を書き込みます。
doubleの配列を割り当て、配列の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
だからあなたの質問に答えるために:
この機能が何のために必要なのか説明してもらえますか?
v の内容を n にコピーしますか?
v
が double でn
int であることを考慮すると、意味がありません。配列をn
大きくし、値で初期化しますv
。はいの場合、なぜ a を返すのですか?
a
れるので、新しく作成された配列への参照があります。(使用方法については上記の例を参照してください)バイトのメモリ領域を割り当て、値n * sizeof(double)
で完全に埋めますv
ヒープに n 個の double の配列を割り当て、v で埋めて、それへのポインターを返しますか?
n 回複製してv
float の配列にする
配列は関数で割り当てられ、n
float 要素を含みます。
関数の最後に、配列の各要素が値としてa
含まれていますv