Как сказано в заголовке, у меня есть вопрос относительно использования * дважды, как в основной функции следующего кода. он работает, но я не понимаю, почему использование ** здесь. То, что я хочу, это массив SPPoints, размер n, где parr - базовый адрес. Почему ** правильно и * неправильно в этом случае? Благодарю.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 is * not * typedeffed. Вы используете компилятор C++? – wildplasser
Это в файле заголовка, извините за то, что не в том числе. – Gray