当前位置:   article > 正文

关于嵌套结构体指针的赋值_结构体嵌套结构体赋值

结构体嵌套结构体赋值

目的:在实际使用链表时,发现无法正常对嵌入的指向其他结构体指针的内容进行赋值,故而有了以下的记录。
我们在使用链表时,有时候会包含指向其他结构体的指针
比如说

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

注意,对于指针来说就是占4个字节。如果定义的是指针类型,如下面的s1,s2所示,赋值时我们必须先要进行空间分配,不然是无法进行赋值的。

a* s1;
b* s2;
  • 1
  • 2

假设我们要对s1,s2指针内容进行赋值。

s1 = (a*)malloc(sizeof(a));
s1->a1 = 10;
  • 1
  • 2

而对于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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

假设设的是结构体类型,就不需要进行空间的分配

a s1;
b s2;
  • 1
  • 2

可以直接进行赋值,但对于包含的指针变量还是得先申请空间。

s1.a1 = 10;
s2.b2 = (a*)malloc(sizeof(a);
s2.b2->a1 = 10;
  • 1
  • 2
  • 3

数组使用符号.,指针使用符号->
总结下来就是
当我们需要对指针进行赋值操作时,也就是说不是指针间的赋值时,我们需要先申请变量空间,对于嵌套的指针变量,都需要进行空间申请,才能对其中的内容进行赋值。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/信息技术墨韵书生/article/detail/63208
推荐阅读
相关标签
  

闽ICP备14008679号