了解 GNU 科学图书馆文档

Understanding GNU Scientific Library documentation

我正在尝试使用 GNU 科学图书馆,但无法理解其文档。这是 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, I would expect something like gsl_rng = *r, which would take the value of r and store that as gsl_rng. My guess is that gsl_rng isn't a variable, but some GNU Scientific library command; however I don't understand the 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 ...

我的问题似乎非常基本,这很麻烦。谁能指出我正确的方向?

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

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

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