我有:
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;
- 将
b
初始化为有效指针 初始化 - 初始化
b->a->var
.
b->a
为一个有效的指针。#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 a
和struct b
。