首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于链表的初始化过程解决方案

2012-02-25 
关于链表的初始化过程下面是两个链表的初始化过程while(i 8){g_listg_list- nexti++}第二个while(i8

关于链表的初始化过程
下面是两个链表的初始化过程
while   (i <8)
{
      g_list   =   g_list-> next;
      i++;
}

第二个
while   (i   <8)
{
        g_list-> next   =   ++g_list;
        i++;
}
请问这两个方式是一样的吗?

[解决办法]
单从代码的意义上来说,如果链表是顺序表(也就是存储结构类似数组的话),那么一二两种方式是一样的,每次循环都使g_list指针指向链表中的下一个节点。如果不是顺序表的话,第一个的意义不变,但第二个就是错误的了。

第二个的错误在于,++g_list的意义。普通的指针不是不能做自增运算,从语法上说他是完全可以的,C的编译器也绝对不会报错,程序差不多可以运行,但是几乎可以肯定地说结果是错误的(所以相当于不能)。如果不是顺序表,++g_list所指向的并不是链表的下一个节点的地址,而只是g_list地址旁边的一个地址,比如数据类型占2字节的话,g_list地址为1000,那么++g_list指向的是1002。真正的链表下一个节点在哪里呢,由于不是顺序表,所以表中的节点存储位置是随机的,你是不知道的。

热点排行