理解GNU Scientific Library文档

时间:2018-01-11 10:12:13

标签: c++ gnu

我正在尝试使用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的值......

我的问题似乎非常基本,令人不安。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

gsl_rng是一种类型。语句gsl_rng * r;声明了一个名为r的全局变量,其类型指针指向gsl_rng。 稍后,有一行r = gsl_rng_alloc (T);,它为该声明的变量赋予一些值。

这是基本的C ++,所以如果你想了解这些代码,也许你应该从一些good book开始。

答案 1 :(得分:1)

诀窍是要记住有不同种类的随机数生成器。每个人都是自己的班级。 gsl_rng_alloc方法将为您创建一个随机数生成器 object ,但想知道要使用哪个类。你告诉它通过传递类使用什么类。然后该方法使用该类为您实例化一个对象。它会返回指向它为您创建的对象的指针。