タイトルで述べたように、次のコードの主な機能のように、*を2回使用することに関して質問があります。それは実行されますが、なぜ**を使用しているのか分かりません。私が望むのは、parrがベースアドレスであるnというサイズのSPPointsの配列です。この場合、**正しいと*間違っているのはなぜですか?ありがとう。C、ポインタ(またはポインタへのポインタ?)、**、malloc
SPPointコード:
struct sp_point_t
{
double* data;
int dim;
int index;
};
SPPoint* spPointCreate(double* data, int dim, int index)
{
if (data == NULL || dim <= 0 || index < 0)
{
return NULL;
}
SPPoint* point = malloc(sizeof(*point));
if (point == NULL)
{
return NULL;
}
point->data = (double*)malloc(dim * sizeof(*data));
for (int i = 0; i < dim; i++)
{
point->data[i] = data[i];
}
point->dim = dim;
point->index = index;
return point;
}
、これが主な機能である:
int main()
{
int n, d, k;
scanf("%d %d %d", &n, &d, &k);
double* darr = malloc(d * sizeof(double));
if (darr == NULL)
{
return 0;
}
SPPoint** parr = malloc(n * sizeof(SPPoint*));
if (parr == NULL)
{
return 0;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < d; j++)
{
scanf(" %lf", &darr[j]);
}
parr[i] = spPointCreate(darr, d, i);
}
}
'SPPoint ** parr;'はポインタ(配列)のポインタです – wildplasser
'SPPoint * spPointCreate(...)' BTW:SPPointは* typedeffedではありません。 C++コンパイラを使用していますか? – wildplasser
これはヘッダファイルにありますが、それを含めないと申し訳ありません。 – Gray