结构指针的解除引用

问题描述 投票:0回答:1

我想传递一个如图所示的点阵结构,如何才能正确地去引用地址,改变地址指向的值。

// header file "header.h"
typedef struct {
    double x;
    double y;
} Pointbase;
typedef Pointbase *XYpt;

typedef struct {
    XYpt xy[1];
} ChartPointsbase;
typedef ChartPointsbase **PointArray;

#include "header.h"
...

void npCluster(double drop, XYpt *newpt, PointArray outpts)
{
    double xx[2]={-15, 100};
    int i;
    outpts = (PointArray)malloc(sizeof(PointArray) * 2);
    for (i=0;i<2; i++) 
    {
        (*(*outpts)->xy[i])->x=xx[i];
        (*(*outpts)->xy[i])->y=drop;
    }
}

编译器喜欢下面这一行,但不计算。

        (*outpts)->xy[i]->y=drop;

如有任何建议将非常感谢。

pointers data-structures dereference
1个回答
0
投票

我为 "c "编译器想出的办法如下:定义struct,每个结构有两个大小为dimsize的1D数组,将内存分配给句柄,设置大小=k,并按如下方式进行去引用。

for (i=0; i<k; i=i++)
        {
            (*(outpts->xx))->dat[i]=135*i+j;
            (*(outpts->yy))->dat[i]=drop;
        }

为了进一步嵌套,比如说上面的结构体数组有两个不等的点数组,其中cht是PointArray的数组。

typedef struct {
    int32 dimSize;
    C1Hdl cht[1];
} XYchartCluster;

// initialize 1st array
for (i=0; i<k; i=i++)
        {
            (*(*(xycht)->cht[0])->xx)->dat[i]=135*i+j;
            (*(*(xycht)->cht[0])->yy)->dat[i]=drop;
        }
// initialize 2nd array with values from point npt
for (i=0; i<sz; i=i++)
        {
            (*(*(xycht)->cht[1])->xx)->dat[i]=npt->x;
            (*(*(xycht)->cht[1])->yy)->dat[i]=npt->y;
        }


/*
Note: size of each array in chart should be initialized and 
memory assigned (dynamically changing size)
*/
© www.soinside.com 2019 - 2024. All rights reserved.