找回密码
 注册
查看: 2160|回复: 6

有关初始量设定的问题

[复制链接]
发表于 2009-7-14 09:22:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我在UDF中要模拟编写一个质量源项,类似于反应的,源项的生成速率是与剩余的反应物的多少有关。
所以在UDF编写重要用到累积。
比如说累积生成的量为a,
一开始我定义real a=0;
在计算中a+=det_a;

我的问题是如果这样定义的话,是不是每次执行这个UDF的时候,都会先执行a=0;如果是的话,应该怎么编写才可以让a=0仅仅执行一次呢。
发表于 2009-7-14 11:58:23 | 显示全部楼层
原帖由 vip_lws 于 2009-7-14 01:22 发表
我在UDF中要模拟编写一个质量源项,类似于反应的,源项的生成速率是与剩余的反应物的多少有关。
所以在UDF编写重要用到累积。
比如说累积生成的量为a,
一开始我定义real a=0;
在计算中a+=det_a;

我的问题是 ...

使用全局变量,或者静态变量
static real a=0;
a+=det_a;
 楼主| 发表于 2009-7-14 17:39:34 | 显示全部楼层
谢谢,我这中情况应该使用静态变量,这是在第一步使用吧
 楼主| 发表于 2009-7-14 17:44:58 | 显示全部楼层

回复 2# gearboy78 的帖子

我想确认下,如果我只是想在一开始给它赋予0值,是不是就要使用静态变量,这样的话,在动态计算过程中,这个值赋值语句就不会在运行了。就可以达到累加的效果。
发表于 2009-7-15 12:27:21 | 显示全部楼层
原帖由 vip_lws 于 2009-7-14 09:44 发表
我想确认下,如果我只是想在一开始给它赋予0值,是不是就要使用静态变量,这样的话,在动态计算过程中,这个值赋值语句就不会在运行了。就可以达到累加的效果。


DEFINE_XXXXX(XXX)
{
static a=0;
a+=delta_a;
.....
}
初次进入的时候会执行设置a为零,第二次进入的时候是不会再设置a为零的。静态变量存储在静态存储区,和全局变量类似,即使在子函数外面,该静态变量的存储区域也不会清空,所以下次在进入的时候就会保留上一次的值。另外static a=0;的意思是定义变量的时候同时初始化,一定要写在一行上面,千万不要如下写
static a;
a=0;
那就变成定义变量,然后给该变量赋值了,不是初始化a值了。如果这样写,每次进入的时候都会执行a=0;
 楼主| 发表于 2009-7-15 20:01:13 | 显示全部楼层

回复 5# gearboy78 的帖子

太感谢了,呵呵。明白了。
我想进一步问一下,如果我是这样定义的.如果我是在
DEFINE_XXXXX(XXX)
{
}
前面定义的,应该就是全局变量吧,效果应该和静态便来那个一样吧。
发表于 2009-7-16 12:29:38 | 显示全部楼层
原帖由 vip_lws 于 2009-7-15 12:01 发表
太感谢了,呵呵。明白了。
我想进一步问一下,如果我是这样定义的.如果我是在
DEFINE_XXXXX(XXX)
{
}
前面定义的,应该就是全局变量吧,效果应该和静态便来那个一样吧。

DEFINE_XXXXX(XXX)其实就是一个子函数,在子函数外面定义的就是全局变量了。任何子函数内都可以对全局变量进行访问。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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