在链表中,这个指针指向下一个slist数据的地址,从而使数据形成一个“链”。
有什么疑问请留言。
我不太明白他为什么不在花括号在定义 这属于嵌套定义吗
严格来说,这里的“定义”应该叫做“声明”(更确切一些称呼应该是“含有”)。
[数据]---->[数据]---->[数据]---->...---->[NULL]
这种结构好像排队一样,便于管理,属于高级结构
我不明白的是 他为什么不在花括号之外定义
你的意思是那一种?
为什么要用struct结构体,并且把变量定义在结构体里?
为什么要把struct slist*指针定义在结构体里,而不能定义在结构体外?
如果是第一种, 原因是便于管理,比如:
int age_1, age_2;
char* name_1, *name_2;
与
struct People
{
int age;
char* name;
}
哪个好管理?是第二种好管理,如果用第一种要声明好多变量,而第二种只需声明2个struct People,用成员运算符就好了,每个People有不同的属于自己的值
如果是第二种,如果你没学链表就没多大碍,当第一种问题对待,那么你要换个角度看,struct slist*是一只手,它可以牵着另一个struct slist结构体(存这另一个结构体的地址),这样你可以不断的动态分配内存再不断的让他们首尾相连,这然就是个队列
struct a
{
int num;
struct a* next;
};
//-------xx------
struct a* one = (struct a*)malloc(sizeof(struct a)); //动态分配内存
one->next = (struct a*)malloc(sizeof(struct a)); //直接为里面的struct a* next分配内存
one->next->next = (struct a*)malloc(sizeof(struct a)); //直接为里面的struct a* next里面的struct a* next分配内存
one->next->next->num = 87;
经过上面的操作后你有了一个嵌套的数据体
struct a* one{一个地址}-------指向----->struct a ???{int num;struct a* next{一个地址}-----指向------>....--->struct a???{int num{87};struct a* next{???/NULL}}}
你就有1个指针指向了一个数据列
为啥不在指针外调用呢
为啥不在结构体外调用呢
他代表的是下一个元素的地址吗
不是,只是个具有指向结构体本身功能的指针而已,和其下一个元素毫无关联,除非你写进去了下个结构体包含的数据
举个在文件内部传递的例子
slist return_list;
static slist hoding_list;
某function里面
return.next->data = hoding_list.data; /*你想要指向的数据,没被赋值或初始化为0*/
return.nex->next =hoding_list.list; /**/
楼下有大佬讲挺细了,list就是方便取用,你可以把指针本身进行赋值化,然后你指的对象是唯一的,变成类似数组形式的结构体.
2019-11-10
他的意义是什么呢
还有为啥不在指针外而是指针内呢