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サイズの新しく割り当てられた配列を返すか、割り当てが失敗した場合。nvNULL
このループ:
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 でnint であることを考慮すると、意味がありません。配列をn大きくし、値で初期化しますv。はいの場合、なぜ a を返すのですか?
aれるので、新しく作成された配列への参照があります。(使用方法については上記の例を参照してください)バイトのメモリ領域を割り当て、値n * sizeof(double)で完全に埋めますv
ヒープに n 個の double の配列を割り当て、v で埋めて、それへのポインターを返しますか?
n 回複製してvfloat の配列にする
配列は関数で割り当てられ、nfloat 要素を含みます。
関数の最後に、配列の各要素が値としてa含まれていますv