游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3110|回复: 10

一个关于指针指向的问题,不用中介的指针就是不对,请

[复制链接]

14

主题

45

帖子

45

积分

注册会员

Rank: 2

积分
45
发表于 2005-10-31 09:36:00 | 显示全部楼层 |阅读模式


typedef struct Md5_Child
{
        int ndex;
        Md5_Child        *next;
}Md5_Child;




for(i=0;i<m_Num_Joint;i++)

Md5_Child* siqi = ss[p].bone[ss[p].bone.parent].child;



while(siqi->next!=NULL)
        siqi=siqi->next;

siqi->next=new Md5_Child;

siqi->next->index=i;
siqi->next->next=NULL;



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

下面是上面程序的另一种写法,唯一的变化就是不定义Md5_Child* siqi = ss[p].bone[ss[p].bone.parent].child了,而是直接用ss[p].bone[ss[p].bone.parent].child,不用siqi这个中介指针了,结果就完全不对,请问为什么象这种时候直接写反倒不行,还要一个中介指针Md5_Child* siqi呢!我觉的定义中介指针只是为了简化程序书写的,怎么反倒费用它不可呢?

typedef struct Md5_Child
{
        int index;
        Md5_Child        *next;
}Md5_Child;



for(i=0;i<m_Num_Joint;i++)

while(ss[p].bone[ss[p].bone.parent].child->next!=NULL)

     ss[p].bone[ss[p].bone.parent].child=ss[p].bone[ss[p].bone.parent].child->next;




ss[p].bone[ss[p].bone.parent].child->next=new Md5_Child;

ss[p].bone[ss[p].bone.parent].child->next->index=i;
ss[p].bone[ss[p].bone.parent].child->next->next=NULL;














0

主题

53

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2005-10-31 17:58:00 | 显示全部楼层

Re:一个关于指针指向的问题,不用中介的指针就是不对,

不建一个缓冲指针空间
地址不存出来
当然所有的child都是同一个地址了

2

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2005-10-31 18:31:00 | 显示全部楼层

Re: 一个关于指针指向的问题,不用中介的指针就是不对,

ss[p].bone[ss[p].bone.parent].child = ss[p].bone[ss[p].bone.parent].child->next;

这一句,很明显 child 指针被改动了,child被赋值为next。

11

主题

123

帖子

123

积分

注册会员

Rank: 2

积分
123
发表于 2005-10-31 20:06:00 | 显示全部楼层

Re:一个关于指针指向的问题,不用中介的指针就是不对,

看不出毛病,应该没问题的,你其他部分的问题,上面两个都是胡说.

11

主题

123

帖子

123

积分

注册会员

Rank: 2

积分
123
发表于 2005-10-31 20:10:00 | 显示全部楼层

Re:一个关于指针指向的问题,不用中介的指针就是不对,

parent].child是struct Md5_Child的指针类型吗?

2

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2005-11-1 09:34:00 | 显示全部楼层

Re: Re:一个关于指针指向的问题,不用中介的指针就是不


楼上的,你可以有不同的看法,但请注意语气。

原版:
Md5_Child* siqi = ss[p].bone[ss[p].bone.parent].child;
while(siqi->next!=NULL)
    siqi=siqi->next;

这里siqi最后被指向siqi->next(叶结点),而ss[p].bone[ss[p].bone.parent].child的指向并没有被修改到, 而修改版:

while(ss[p].bone[ss[p].bone.parent].child->next!=NULL)
     ss[p].bone[ss[p].bone.parent].child=ss[p].bone[ss[p].bone.parent].child->next;

ss[p].bone[ss[p].bone.parent].child的指向被修改了,也就是说每一个Joint的第一个子结点在运行完上面的语句后都指向了叶结点,中间的所有结点都丢失了。


14

主题

283

帖子

293

积分

中级会员

Rank: 3Rank: 3

积分
293
QQ
发表于 2005-11-2 02:44:00 | 显示全部楼层

Re:一个关于指针指向的问题,不用中介的指针就是不对,

代码没问题,只是把链表结点丢了,只剩最后两个结点了.
不知道楼主说的不行是指什么不行,编译运行应该是没问题的

14

主题

283

帖子

293

积分

中级会员

Rank: 3Rank: 3

积分
293
QQ
发表于 2005-11-2 02:46:00 | 显示全部楼层

Re:一个关于指针指向的问题,不用中介的指针就是不对,

搞明白指针是什么就不会出这种问题了...

3

主题

186

帖子

190

积分

注册会员

Rank: 2

积分
190
发表于 2005-11-2 19:14:00 | 显示全部楼层

Re:一个关于指针指向的问题,不用中介的指针就是不对,

单看这段代码似乎没有问题,我认为也不存在链表结点丢失的问题存在
ss[p].bone[ss[p].bone.parent].child=ss[p].bone[ss[p].bone.parent].child->next
这条语句并没有失链表结点信息损失,只是改变了ss[p].bone[ss[p].bone.parent].child这个值而已,而这个值在这里应该与链表无关

根据你这一段程序我大胆假设你这里是有m_num_joint个链表,而不是只有一个。如果是这样的话,那么可能在你程序的其它地方用到child这个值的时候已经不是你想要的值,而是已经被改变为指到这个链表的倒数第二个struct

14

主题

283

帖子

293

积分

中级会员

Rank: 3Rank: 3

积分
293
QQ
发表于 2005-11-3 03:16:00 | 显示全部楼层

Re:一个关于指针指向的问题,不用中介的指针就是不对,

前面的节点已经无法得到了,所以是丢失了,数据是还存在,但是已经无法得到了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 11:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表