指向c语言结构体变量指针的指针



我有:

typedef struct a{  
int var;  
}aa;

typedef struct b{
aa *a;
}bb;
int main()
{   

bb *b;
b->a->var;
return 0;
}

struct a嵌套在b中。如何使用2指针初始化变量var的值:b->a->var;

?
  1. b初始化为有效指针
  2. 初始化b->a为一个有效的指针。
  3. 初始化b->a->var.
#include <stdlib.h>
typedef struct a{
int var;
}aa;
typedef struct b{
aa *a;
}bb;
int main(void)
{
bb *b;
/* initialize b */
b = malloc(sizeof(*b));
if (b == NULL) return 1;
/* initialize b->a */
b->a = malloc(sizeof(*b->a));
if (b->a == NULL)
{
free(b);
return 1;
}
/* initialize b->a->var */
b->a->var = 42;

/* free what are allocated */
free(b->a);
free(b);

return 0;
}

Structa没有嵌套在Structb中,但是Structb包含一个指向Struct a对象的指针。

两个对象的指针可以独立初始化,例如:先为a分配内存,然后为b分配内存,最后将为a分配的内存分配给b->a。但是,最好先为b分配内存:

#include <stdio.h>
#include <stdlib.h>
typedef struct {
int var;
} aa;
typedef struct {
aa *a;
} bb;
int main() {
bb *b = (bb*) malloc(sizeof *b);
b->a = (aa*) malloc(sizeof *(b->a));
b->a->var = 5;
printf("%dn", b->a->var);
free(b->a);
free(b);
}

(为简洁起见,检查malloc的返回值)

注意以相反的顺序释放内存。如果b先被释放,那么指向a的指针就会丢失。另外,请注意类型定义没有声明额外的未使用的struct astruct b

最新更新