首页 > 解决方案 > 如何将多维数组从 Javascript 转换为 C?

问题描述

我目前正在使用 Raylib 框架将代码从 JavaScript 转换为 C 以进行游戏编码练习,我遇到了以下代码:

 area: {
        columns:8,
        map:[ 0, 0, 0, 0, 0, 0, 3, 0,
              0, 0, 5, 0, 0, 0, 0, 4,
              0, 7, 0, 0, 6, 2, 0, 4,
              0, 1, 1, 1, 1, 1, 1, 1,
              7, 0, 0, 0, 0, 0,13, 0,
              0,11,12, 9,10, 0, 0, 7,
              0, 1, 1, 1, 1, 1, 1, 1,
             12, 0,14,14,14, 0, 8, 0 ]
       }

由于我在 C 中工作,我认为这是不言自明的,因为它看起来像一个多维数组。我发现列变量很奇怪,所以我忽略了它(我稍后会回来)。然后,稍后在 JavaScript 代码中,我看到一个具有以下内容的函数:

var value  = area.map[row * area.columns + column];

所以,这是一个有两个成员的对象;一个名为“column”的 int 和一个名为“map”的多维数组;我可以做一个结构。但是,为什么 area.map[] 只有一个括号,这不应该是一个多维数组吗?数组的哪些元素在这里被操作?另一个支架在哪里?我如何将它翻译成 C 代码来读取数组?

标签: javascriptc

解决方案


不确定这是否是您所追求的,但这是C语言的翻译

struct Area
{
  unsigned int columns;
  unsigned int map[];
};

struct Area area = {
  .columns = 8,
  .map     = { 0, 0, 0, 0, 0, 0, 3, 0,
               0, 0, 5, 0, 0, 0, 0, 4,
               0, 7, 0, 0, 6, 2, 0, 4,
               0, 1, 1, 1, 1, 1, 1, 1,
               7, 0, 0, 0, 0, 0,13, 0,
               0,11,12, 9,10, 0, 0, 7,
               0, 1, 1, 1, 1, 1, 1, 1,
              12, 0,14,14,14, 0, 8, 0 }
};

unsigned int value = area.map[row * area.columns + column];

推荐阅读