2014-10-09 238 views
-1

我有以下结构,它包含两个整数值。指向结构指针的指针

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;我想弄明白这是如何工作的,所以我画了一个可能的可视化图像,并希望有人能确认我是否正确。

pointer to pointer to structure of type data

我知道这是不是最大的数据结构等这么做是严格帮我澄清我的指针理解。

+1

又是什么问题?为什么不自己尝试并在问题出现后询问? – zubergu 2014-10-09 15:02:42

+0

问题是如果我的可视化是正确的。我已经画出了我认为正在发生的事,但我可能是错的。 @zubergu现在清楚了 – user1010101 2014-10-09 15:03:34

+0

'struct data ** array;'不是你的图像显示。它只是一个带有垃圾值的4字节内存。 – 2014-10-09 15:14:20

回答

1

你的可视化效果很好。

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

阵列索引操作([0])将去参考第一元件,这意味着汽提从所述类型的指针。

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

1

为了帮助你明确在你的头脑(和你的代码)的一切,你可以做到以下几点:

typedef struct data* data_ptr

然后,结构VEC可以写成

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

所以,数组的确是一个指向数据结构的指针。 然而数组是一个令人误解的名字,因为你可以用其他数据结构如列表等获得你想要的结果。 如果你决定坚持使用数组,那么你应该正确地分配内存并释放它,并且该结构看起来像你所绘制的。

因此,(在正确的初始化之后),array[i]会给你一个指向第i个数据结构的指针,而array[i]->v1应该给你第i个结构的v1值。