【发布时间】:2017-05-13 07:36:31
【问题描述】:
正如标题中所说,我有一个关于使用 * 两次的问题,就像在以下代码的 main 函数中一样。它确实运行,但我不明白为什么在这里使用 **。我想要的是一个 SPPoints 数组,大小为 n,其中 parr 是基址。为什么在这种情况下**是对的,*是错的?谢谢。
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;是指向(一个或多个)指针的指针 -
SPPoint* spPointCreate(...)BTW:SPPoint 不是类型化的。您使用的是 C++ 编译器吗? -
在头文件中,抱歉没有包含。
-
它在在哪里并不重要:在C中,结构定义不等同于类型化结构。
-
我明白了,这很有趣,因为我的课程人员给了我们带有以下行的头文件:( typedef struct sp_point_t SPPoint; ),并告诉我们我们需要在C 文件。那么如果它在头文件中typedef,那么它是否也必须像在C文件中那样?
标签: c memory malloc dynamic-memory-allocation