c语⾔next函数定义,c语⾔的数据结构中,next是如何指向下⼀
个元素的?
匿名⽤户
1级
2013-04-27 回答
楼上的哥们好像回答的⽅向偏了
指针的声明
指向类型 *p;
这个*就标志这这是⼀个指针,声明之后,变量p在调⽤的时候就不是调的指针本体了,⽽是指针所指的⽬标!
例如:p->next
这不是指针p的next,⽽是指针p所指向的⽬标中的next
结构体作为⾃定义的数据结构,创建后系统只能返回整个结构体的⾸地址,所以只能⽤⼀个指针来接,结构体中指针变量命名为next只是国际惯例,你就算改成*n也⼀样,只是以后⽤的时候:
p->next 改成 p->n 就可以了
指针赋值常⽤的有两种:
1、把⽬标的地址取来赋给指针
p = & target //&就是取地址符
2、把另⼀个指针所指向的⽬标的地址赋给指针
p = q;
追问:
这个P->next为什么表⽰指向下⼀个呢?如果⽤线性表可以⽤++i什么的来指向下⼀个,可是这个没有类似的啊!⽽且双向链表中,定义改变了⼀下,
typedef struct DuLNode //定义结构体
{
ElemType data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode,*DuLinkList;
然后p->prior就表求指向p的前⼀个元素,这是怎么做到的啊?在我看来,next和prior的定义是⼀样的形式,怎么会有不同的效果呢?
追答:
p也是可以执⾏++操作的,意思就是访问p指针所在内存地址的下⼀个地址中的数据,但是这个p指针变量是独⽴声明的,他的下⼀个地址⾥⾯是什么数据你是不知道的,所以单独的p++是没有意义的。
你所说的线性表,我理解为就是数组或者在物理地址上是连续的⼀种存储结构,在物理地址与逻辑地址存在关联的时候,p++才有意义,因为你知道,当前地址下⼀个地址中的数据,就是你线性表中下⼀个数据。
p++并不是单纯的线性向下探索⼀个物理地址,它会根据p所指向的数据类型来判断++到底是向下探测⼏个,⽐如int *p,那p++就是向下探测⼀个,如果是你这样的DuLNode *p,就是计算出⼀个结构体⼀共需要多少个地址空间,这时的++就是向下探测⼀个结构体的空间,去寻下⼀个结构体,当然,前提是物理地之上,这两个结构体是挨着的
⽽链表最⼤的特性就是:节点可以不是物理连续的,他们靠指针来串起来,让你可以从逻辑上认为是连续的⼀个整体。
关于你的第⼆个问题:“然后p->prior就表求指向p的前...”
独⽴来看⼀个结构体是没有意义的,它⾥⾯的*prior、*next仅仅是⼀个变量,它可以被赋成任何地址,⾄于它是否能够成为⼀个双向链表的节点,是由你在实际创建的过程中决定的。自定义函数怎么用c语言
你创建了节点A,并认为它是头节点
然后创建了节点B,作为第⼆个节点,
并把A的地址赋给B的prior,这时,prior才成为B的前⼀个节点
同样,把B的地址赋给A的next,这时,A的next才成为了A的下⼀个节点
以此类推....
假如你将A的prior和next全设为B,B的prior和next全设为A,那么这就建⽴了⼀个最简单的环形链表,所以结构体及其变量具体代表什么意思,是看你怎么⽤来决定的
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论