我正在尝试使用GNU Scientific Library并且无法理解其文档。以下是gsl_rng_env_setup页面上的示例程序:
#include <stdio.h>
#include <gsl/gsl_rng.h>
gsl_rng * r; /* global generator */
int
main (void)
{
const gsl_rng_type * T;
gsl_rng_env_setup();
T = gsl_rng_default;
r = gsl_rng_alloc (T);
printf ("generator type: %s\n", gsl_rng_name (r));
printf ("seed = %lu\n", gsl_rng_default_seed);
printf ("first value = %lu\n", gsl_rng_get (r));
gsl_rng_free (r);
return 0;
}
我的问题从第三行开始,gsl_rng * r。这显然不是乘法(既没有定义变量),所以它必须是指针符号。但是从C++ tutorial on pointers开始,我会期待像gsl_rng = * r这样的东西,它将取r的值并将其存储为gsl_rng。我的猜测是gsl_rng不是变量,而是一些GNU Scientific库命令;但是我也不理解documentation page:这个命令显然不是gsl_rng * gsl_rng_alloc(const gsl_rng_type * T)的形式 - 即使r = gsl_rng_alloc,这个命令也没有括号。
我们的行const gsl_rng_type * T具有相同的形式,但也显然有所不同,这无济于事。这一行似乎是将gsl_rng_type定义为常量,并为其赋值* T - 但这缺少了赋值运算符。然而,T必须是一个变量,因为几行之后它被分配了gsl_rng_default的值......
我的问题似乎非常基本,令人不安。有人能指出我正确的方向吗?
答案 0 :(得分:2)
gsl_rng
是一种类型。语句gsl_rng * r;
声明了一个名为r
的全局变量,其类型指针指向gsl_rng
。
稍后,有一行r = gsl_rng_alloc (T);
,它为该声明的变量赋予一些值。
这是基本的C ++,所以如果你想了解这些代码,也许你应该从一些good book开始。
答案 1 :(得分:1)
诀窍是要记住有不同种类的随机数生成器。每个人都是自己的班级。 gsl_rng_alloc方法将为您创建一个随机数生成器 object ,但想知道要使用哪个类。你告诉它通过传递类使用什么类。然后该方法使用该类为您实例化一个对象。它会返回指向它为您创建的对象的指针。