首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将初始化的数组分配给TwinCAT中的数组

如何将初始化的数组分配给TwinCAT中的数组
EN

Stack Overflow用户
提问于 2021-11-05 12:56:49
回答 2查看 995关注 0票数 3

我试图将两个初始化的数组evenNumbersoddNumbers分配给一个数组integers

代码语言:javascript
运行
复制
PROGRAM ArrayInit
VAR
    evenNumbers : ARRAY[1..3] OF INT := [2, 4, 6];
    oddNumbers: ARRAY[1..3] OF INT := [1, 3, 5];
    
    integers : ARRAY[1..2] OF ARRAY[1..3] OF INT := [evenNumbers, oddNumbers];
END_VAR

这段代码给我一个编译器错误。

阵列初始化

当然,我可以用所需的数字直接初始化integers,如下所示:

代码语言:javascript
运行
复制
PROGRAM ArrayInit
VAR
    integers: ARRAY[1..2] OF ARRAY[1..3] OF INT := [
        [2, 4, 6], [1, 3, 5]
    ];
END_VAR

或者像谢尔盖提到的

代码语言:javascript
运行
复制
PROGRAM ArrayInit
VAR
    integers: ARRAY[1..2, 1..3] OF INT := [
        2, 4, 6, 1, 3, 5
    ];
END_VAR

但是,如果原始数组非常大,并且/或我想记录这些不同的数组是什么,那么最好使用描述性名称。也就是说,integers : ARRAY[1..2] OF ARRAY[1..3] OF INT := [evenNumbers, oddNumbers];很好地显示了integers有两个列表,一个有偶数,一个有奇数。

我还尝试将integers初始化为integers: ARRAY[1..2] OF ARRAY[1..3] OF INT := [[evenNumbers], [oddNumbers]];,但这给出了编译器错误:

无法将‘数组1.3’转换为'INT‘类型

现在我想知道这是否可能?如果是的话,有人知道我怎么做吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-05 14:46:58

若要分配多个级别数组,请在一行中执行。

代码语言:javascript
运行
复制
combinedSet : ARRAY[1..2, 1..2] OF INT := [1,2,3,4];

将导致数组

代码语言:javascript
运行
复制
[
  1 => [
     1 => 1, 
     2 => 2
  ],
  2 => [
     1 => 2, 
     2 => 4
  ]
]

首先,它分配了第一个元素[1, 1][1, 2][1, 3]的所有元素.然后筑巢一个[2, 1][2, 2][2, 3] .

附加信息

将2个数组合并为一个多维的最简单的方法是:

代码语言:javascript
运行
复制
PROGRAM PLC_PRG
    VAR
        arr1 : ARRAY[1..3] OF INT := [1,3,5];
        arr2 : ARRAY[1..3] OF INT := [2,4,6];
        combinedSet : ARRAY[1..2] OF ARRAY[1..3] OF INT;
    END_VAR
    
    combinedSet[1] := arr1;
    combinedSet[2] := arr2;
END_PROGRAM

这不起作用的原因

代码语言:javascript
运行
复制
integers : ARRAY[1..2] OF ARRAY[1..3] OF INT := [evenNumbers, oddNumbers];

因为evenNumbersoddNumbers在使用时没有初始化。如果要在VAR CONSTANT中声明这些内容,它可能会正常工作,但是您将无法在程序中更改这些数组的内容。

票数 3
EN

Stack Overflow用户

发布于 2022-07-11 11:22:42

integers : ARRAY[1..2] OF ARRAY[1..3] OF INT := [evenNumbers, oddNumbers];oddNumbers是常量时,行oddNumbers可以正常工作。不能使用非常量变量初始化其他变量。

如果以后需要更改evenNumbersoddNumbers,您可以创建两个常量evenNumbersConstoddNumbersConst,并将它们用于初始化,如下所示:

代码语言:javascript
运行
复制
VAR
    evenNumbers : ARRAY[1..3] OF INT := evenNumbersConst;
    oddNumbers  : ARRAY[1..3] OF INT := oddNumbersConst;    
    integers : ARRAY[1..2] OF ARRAY[1..3] OF INT := [evenNumbersConst, oddNumbersConst];
END_VAR

VAR CONSTANT
    evenNumbersConst : ARRAY[1..3] OF INT := [2, 4, 6];
    oddNumbersConst  : ARRAY[1..3] OF INT := [1, 3, 5];
END_VAR
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69853619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档