赞
踩
目的:在实际使用链表时,发现无法正常对嵌入的指向其他结构体指针的内容进行赋值,故而有了以下的记录。
我们在使用链表时,有时候会包含指向其他结构体的指针
比如说
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);
s2.b2->a1 = 10;
数组使用符号.
,指针使用符号->
。
总结下来就是
当我们需要对指针进行赋值操作时,也就是说不是指针间的赋值时,我们需要先申请变量空间,对于嵌套的指针变量,都需要进行空间申请,才能对其中的内容进行赋值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。