flash312 发表于 2007-10-4 20:02:45

请问用get_mem开辟内存地址空间是用来干什么的?为什么要这样做

请问用get_mem开辟内存地址空间是用来干什么的?为什么要这样做

wdxxxybby 发表于 2007-10-12 22:39:26

get_mem(n)是从主内存空间获取n个变量的存储地址,并返回第一个对象的开始地址

ssw1216 发表于 2007-10-13 01:25:51

举个例子
def find_add;定义fish函数find_add
head = null   ;给head赋值
p_gp = gp_head;第一个网格结点的指针赋给p_gp
loop_while p_gp # null;当p_gp值不为null时作循环
x_pos = gp_xpos(p_gp);将指针为p_gp的结点的x坐标值赋给x_pos
if x_pos = 10.0 then;如果x_pos = 10.0 则(执行)
new = get_mem(2);从主内存空间里得到2个fish变量对象并返回第一个对象的开始地址
mem(new) = head;将head类型和数值置于地址为new的fish变量
head = new;将new值赋给head
endif
p_gp = gp_next(p_gp);将结点指针为p_gp的下一个结点的指针赋给p_gp
endloop;结束循环
end;结束fish函数
实际上这个fish函数为满足条件(x坐标为10的)的zone的地址开辟一定的地址空间,各地址之间存在一定的联系
找到第一个符合条件的zone地址后,用new = get_mem(2) 从主内存空间里得到2个fish变量对象并返回第一个对象的开始地址,并用下面的mem(new) = head,将第一次开辟的两个变量的第一个变量存储地址head(注意第一次head=null),第二个变量存储第一个符合条件的zone地址,并将第一个变量的地址赋予head(head=new),第一次循环结束;下次循环,同样开辟两个变量对象,第一个变量对象记录上次循环开辟的第一个变量的地址,第二个记录第二个符合条件的zone地址,其余循环依次类推,这样子就建立了一个符合条件的zone地址链条,方便以后使用。
在调用时,用ad=head,就将最后一个循环开辟的两个变量的第一个变量的地址赋予ad,进行调用时,后找到的zone地址将被先调用,最后一直循环到最先开辟的两变量,因最先开辟的两变量的第一个变量的地址为null,因此可以控制循环结束。

woodyly 发表于 2007-11-9 20:59:23

谢谢,最近一直被这个问题困扰,多谢ssw1216指教
赞一个

wangyi2002598 发表于 2007-11-17 11:39:04

mem(new+1) = p gp

longyutian 发表于 2007-11-19 12:53:08

好东西啊,收藏

chchyao 发表于 2007-11-25 12:39:23

非常好 顶起

tommy1840 发表于 2007-12-20 16:54:53

非常好,太谢了,困扰了我好久,呵呵

66847789 发表于 2007-12-20 18:33:42

回复 #3 ssw1216 的帖子

太谢谢了,mem(new+1)=p_gp和head=new这两句困扰我很久了,总不能肯定第二句传给head的指针是null还是p_gp。现在总算明白点了。
链表倒着存,顺着读。

凌晨两点 发表于 2008-3-5 10:02:48

回复 3# 的帖子

困惑好长时间了,终于搞明白了,使劲的顶

sgzwt 发表于 2008-8-14 10:07:33

谢谢

谢谢,最近两天就在为这个东西困惑,楼主解释的太详细了。

tyq1982 发表于 2008-10-26 10:40:31

谢谢 

 收藏  无限感谢!

tyq1982 发表于 2008-10-26 10:43:58

 斑竹 

 能给小弟留个QQ吗? 

fanjunwei 发表于 2009-3-3 15:27:40

非常好,太谢了,困扰了我好久,呵呵

chb168 发表于 2009-3-3 21:27:19

按着我的理解,应该再有一个语句mem(new+1)=p_gp,可是貌似有些地方没有?为什么啊?

witwang 发表于 2010-8-21 19:29:38

第一个变量对象记录上次循环开辟的第一个变量的地址,此话怎讲??
若只记录了第一个变量的地址,而这里的第一个变量又是记录了前一个内存空间的第一个变量的地址,那怎么提取连续空间的第二变量呢?而第二变量才是真正记录的节点信息。
是否:第一个变量对象记录上次循环开辟的整个内存空间的首地址,

Geolieno 发表于 2011-5-17 16:29:57

楼上ssw1216讲的很好,看了后总算懂一些了,只是 对其中“第一个变量对象记录上次循环开辟的第一个变量的地址”这一部分还是不太理解,通过所举的例子建立了链表有两列数据,第二列数据是符合条件的zone地址,第一列数据是每次循环时开辟的变量的地址,其中第一个是null,那么第二个,第三个是?哪位能帮忙解答一下

thoma 发表于 2011-6-30 04:12:23

Thank you very much

sunxinpo 发表于 2011-7-6 11:49:54

非常感谢,好长时间搞不懂

咬钩鱼 发表于 2012-3-2 19:32:01

楼主很专业!
页: [1] 2
查看完整版本: 请问用get_mem开辟内存地址空间是用来干什么的?为什么要这样做