C,关于指针(或指向指针的指针?),**和malloc

酒吧

如标题中所述,我有一个关于两次使用*的问题,就像下面代码的主要功能一样。它可以运行,但是我不明白为什么在这里使用**。我想要的是大小为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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章