指向结构的指针

时间:2014-10-09 14:53:26

标签: c pointers data-structures struct

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

struct data
{
 int v1;
 int v2;
};

/*some functions on struct data*/

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

现在我有以下结构vec,它会像列表一样,这个结构有大小和指向数据类型结构指针的指针。

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

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

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

  1. struct data ** array; 我正在试图弄清楚它是如何工作的,所以我已经绘制了它可能是什么的可视化,如果有人可以确认我是否正确,我将不胜感激或不
  2. pointer to pointer to structure of type data

    我知道这不是最好的数据结构等,这是严格要做的,以帮助我澄清我对指针的理解。

2 个答案:

答案 0 :(得分:1)

为了帮助您澄清您心中的一切(以及您的代码),您可以执行以下操作:

typedef struct data* data_ptr

然后,struct vec可以写成

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

因此,数组确实是指向数据结构的指针。 然而,数组是一个误导性的名称,因为您可以通过列表等其他数据结构获得您想要的内容。 如果您决定坚持使用数组,那么您应该正确分配内存并在结尾处释放它,结构看起来就像您绘制的那样。

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

答案 1 :(得分:1)

您的可视化效果很好。

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

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

因此,如果array的类型为struct data **,则array[0]的类型将为struct data *(注意少*},这就是我们期待。