为指针分配内存以在结构内构造

时间:2011-11-01 11:17:09

标签: c pointers dynamic-allocation

我有2个结构:

struct b{int b;float d;}; and 
struct a{int count; struct b* ptr;}
struct a *a_temp;

现在我为10个b类型的结构分配内存,并将地址放在struct a的ptr中。 (代码是给我的,他们不想出于某种原因使用双指针)

a_temp = (struct a*)malloc(sizeof(struct a));
a_temp->ptr = (struct b*)malloc(10*sizeof(struct b));
struct b* b_temp;

我必须将类型b的第二个结构的地址加载到temp_b。 我试过b_temp = a_temp->ptr[1];,这是错误的 但b_temp = &(a_temp->ptr[1]);在我尝试使用它并使用它来访问结构b的内容时有效,为什么会这样?

提前致谢

1 个答案:

答案 0 :(得分:3)

ptr[1]是结构,由ptr + 1指向(就像*(ptr+1)),b_temp获取指向结构的指针,因此您必须传递{{1}的地址},这是a_temp->ptr[1]

&a_temp->ptr[1]

编辑:

如果你有一个指针,让我们说expression | type --------------------------- a_temp->ptr | struct b* a_temp->ptr[1] | struct b &a_temp->ptr[1] | struct b* a_temp->ptr + 1 | struct b* b_temp | struct b* ,那么下面的表达式是相同的:int * xx[1],它们都尊重地址*(x+1)。换句话说,那些表达式值是指针x+1指向的变量类型,在这种情况下它是x,因为intx(指向int *)它为int变量保留地址