什么';这个c++;片段? 多年的java、javascript、python,我不仅忘记C++,而且混淆了语法。

什么';这个c++;片段? 多年的java、javascript、python,我不仅忘记C++,而且混淆了语法。,c++,C++,带2D数组的lualibs init?luaL_reg是一种类型,但显然不是数组 const luaL_reg *lib; for (lib = lualibs; lib->func != NULL; lib++) { lib->func(l); lua_settop(l, 0); } luaL_reg是一个包含两个元素的struct,这是谷歌快速搜索的结果 第一个代码片段是创建luaL_regstructs的数组: 第一个结构用两个值初始化:{“base”,l

带2D数组的lualibs init?luaL_reg是一种类型,但显然不是数组

const luaL_reg *lib;

for (lib = lualibs; lib->func != NULL; lib++)
{
    lib->func(l);
    lua_settop(l, 0);
}

luaL_reg
是一个包含两个元素的
struct
,这是谷歌快速搜索的结果

第一个代码片段是创建
luaL_reg
struct
s的数组:

  • 第一个
    结构
    用两个值初始化:
    {“base”,luaopen_base}
  • 数组中的第二个
    luaL_reg
    struct
    设置为:
    {NULL,NULL}
总之,它不是一个2D数组,而是一个结构数组,其中每个结构包含两个元素


第二个例子现在应该是不言自明的
lib
是指向
luaL\u reg
struct
luaL\u reg
的指针,可能如下所示

typedef struct luaL_reg_t {
  char const * const name;
  void(*func)(< type_of_<l> >);
} luaL_reg;

在初始化数组成员时,也可以使用前面代码段中显示的语法。在下面的代码片段中,const luaL_reg实例数组被设置为包含两个对象,第一个对象具有
名称
=
“base”
func
设置为
luaopen_base

把事情弄清楚;下面的不是一个2D数组,而是一个
const luaL_reg
数组,使用
{}
来设置每个实例的成员

static const luaL_reg lualibs[] =
{
  { "base",       luaopen_base },
  { NULL,         NULL }
};

最后一个元素用于简化数组的迭代,将两个成员都设置为
NULL
可以很容易地看到我们何时到达最后一个元素

接下来的代码段中的循环利用了这一点。只要成员
func
不等于
NULL
我们就没有到达数组的末尾

for (lib = lualibs; lib->func != NULL; lib++) {
  lib->func(l);
  lua_settop(l, 0);
} 
static const luaL_reg lualibs[] =
{
  { "base",       luaopen_base },
  { NULL,         NULL }
};
for (lib = lualibs; lib->func != NULL; lib++) {
  lib->func(l);
  lua_settop(l, 0);
}