繁体   English   中英

指向结构的指针

[英]Pointer to Pointer to a Structure

我有以下包含两个整数值的结构。

struct data
{
 int v1;
 int v2;
};

/*some functions on struct data*/

struct data* create(int v1,int v2);
void printData(struct data *d);

现在,我具有以下结构,该结构有点像列表,并且该结构具有大小和指向类型数据结构的指针。

struct vec
{
 int size;
 struct data **array;
};

/*possible functions for vec structure*/
struct vec* createVec();
void addFront(struct vec *v, struct data* dta);

由于我是指针的初学者,因此我想澄清和确认我的理解。

  1. 结构数据**数组; 我试图弄清楚这是如何工作的,所以我对可能的情况进行了可视化处理,如果有人可以确认我是否正确,我将不胜感激。

指向类型数据结构的指针

我知道这不是最大的数据结构,因此将严格执行此操作以帮助我阐明对指针的理解。

为了帮助您弄清思路(和代码),可以执行以下操作:

typedef struct data* data_ptr

然后,struct vec可以写成

struct vec
{
 int size;
 data_ptr *array;
};

因此,数组确实是指向数据结构的指针。 但是,数组的名称具有误导性,因为您可以通过列表等其他数据结构获得所需的内容。如果决定坚持使用数组,则应正确分配内存并在最后释放内存,然后结构看起来像你所画的。

因此,(在正确的初始化之后), array[i]将为您提供第i个数据结构的指针,而array[i]->v1应为您提供第i个结构的v1值。

您的可视化效果很好。

如果我们看一下您的图,我们期望vec->array[0]vec->array[0]的第一个元素)是指向struct data的指针,对吗?

数组索引操作( [0] )将取消引用第一个元素,这意味着从类型中删除指针。

因此,如果array的类型是struct data ** ,则array[0]的类型将是struct data * (注意少一个* ),这就是我们所期望的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM