如标题中所述,我有一个关于两次使用*的问题,就像下面代码的主要功能一样。它可以运行,但是我不明白为什么在这里使用**。我想要的是大小为n的SPPoints数组,其中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);
}
}
数组的行为类似于指针。例如,int a []与int * a非常相似。SPPoint中的每个函数都返回一个指向SPPoint结构的指针。可以将指向SPPoint的指针数组编写为指向SPPoint的指针的指针。使用malloc命令,您可以指定一定数量的内存(足以容纳n个指向SPPoint的指针)来存储指向SPPoint结构的指针。
但是,并非所有的指针都是数组。SPPoint ** parr充当一个数组,其中包含指向SPPoint类型的单个结构的指针。
数组的行为可能与指针不同,尤其是在用于字符串时。
使用指向SPPoint的指针(如现在一样)的优点是,您可以查看或修改单个元素,而不必复制整个结构。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句