关于嵌套结构体指针的赋值
⽬的:在实际使⽤链表时,发现⽆法正常对嵌⼊的指向其他结构体指针的内容进⾏赋值,故⽽有了以下的记录。
我们在使⽤链表时,有时候会包含指向其他结构体的指针
⽐如说
typedef struct A
{
uint8_t a1;
uint8_t a2;
uint8_t *a3;
}a
typedef struct B
{
struct B *b1;
a* b2;
uint8_t b3;
}b
注意,对于指针来说就是占4个字节。如果定义的是指针类型,如下⾯的s1,s2所⽰,赋值时我们必须先要进⾏空间分配,不然是⽆法进⾏赋值的。
a* s1;
b* s2;
假设我们要对s1,s2指针内容进⾏赋值。
s1 =(a*)malloc(sizeof(a));
s1->a1 =10;
⽽对于s2指针的赋值
uint8_t array1[5]={1,2,3,4,5};
uint8_t array2[5]={0};
s2 =(b*)malloc(sizeof(b));//只是先对结构体B进⾏空间分配,包含的指针变量占4个字节,还没有具体的地址分配,需要进⾏进⼀步申请
s2->b2 =(a*)malloc(sizeof(a);
s2->b2->a1 =10;
s2->b2->a3 =(uint8_t *)array1;
array2[0]=*s2->b2->a3;
array2[1]=*(s2->b2->a3 +1);
array2[2]=*(s2->b2->a3 +2);
array2[3]=*(s2->b2->a3 +3);
array2[4]=*(s2->b2->a3 +4);
假设设的是结构体类型,就不需要进⾏空间的分配
a s1;
b s2;
可以直接进⾏赋值,但对于包含的指针变量还是得先申请空间。
s1.a1 =10;
s2.b2 =(a*)malloc(sizeof(a);
sizeof 指针s2.b2->a1 =10;
数组使⽤符号.,指针使⽤符号->。
总结下来就是
当我们需要对指针进⾏赋值操作时,也就是说不是指针间的赋值时,我们需要先申请变量空间,对于嵌套的指针变量,都需要进⾏空间申请,才能对其中的内容进⾏赋值。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。