Vector (CAPL)如何使用参数指定数组长度

Vector (CAPL)如何使用参数指定数组长度,vector,capl,Vector,Capl,此代码不起作用。如何在CAPL中使用参数?来分配数组长度。你有很多选择要去做,但是首先你必须考虑你想退一步,问问你自己在运行时是否真的需要可变的数组大小。测量性能是您应该关注的,声明合适的阵列大小作为设计可能是更安全的方法 参数化大小的全局数组可以是这样的: void func(int a){ byte arr[a]; } 从文件来看 CAPL中允许声明数组(数组、向量、矩阵)。它们的使用和初始化方式类似于C语言 在C中,数组大小是恒定的: 数组是由具有特定元素类型的连续分配的非空对象

此代码不起作用。如何在CAPL中使用参数?

来分配数组长度。你有很多选择要去做,但是首先你必须考虑你想退一步,问问你自己在运行时是否真的需要可变的数组大小。测量性能是您应该关注的,声明合适的阵列大小作为设计可能是更安全的方法

参数化大小的全局数组可以是这样的:

void func(int a){
    byte arr[a];
}
从文件来看

CAPL中允许声明数组(数组、向量、矩阵)。它们的使用和初始化方式类似于C语言

在C中,数组大小是恒定的:

数组是由具有特定元素类型的连续分配的非空对象序列组成的类型。这些对象的数量(数组大小)在数组生存期内不会更改。[]

这就是代码无法工作的原因:无法创建基于运行时大小的数组。同样,来自同一个来源

可变长度数组

如果表达式不是整型常量 表达式,声明符用于可变大小的数组

每次控制流通过声明时,表达式 已计算(且其计算值必须始终大于 零),并分配阵列(相应地,VLA的生存期) 当声明超出范围时结束)。每个VLA的大小 实例在其生存期内不会更改,但在另一次传递时会更改 相同的代码,可以分配不同的大小

这就是为什么您应该能够像我向您展示的那样定义参数化数组。即使在代码中,arraySize应该更改,
arr
将包含256个元素,用于执行CAPL脚本

variables
{
    int arraySize = 256;
    byte arr[arraySize];
}
将抛出错误,因为
int a
被确定为非恒定时间,因此违反了上述要求。您可以做的是
memcpy
将较大数组的一部分移动到选择的位置,例如较小的数组,或者像您在CAPL脚本中经常看到的那样使用大量“缓冲”数组


当我把它带回家的时候,它的要点是:使用一个更大的数组,并且精确地知道你将信息放在其中的位置。请注意,您必须做到精确,因为数组中的每个元素都包含某种类型的数据,从一开始,大多数元素都是无意义的,并且没有针对这种数字噪声的保护措施。

根据我的经验,在函数中声明任何类型的变量都会在CAPL中遇到麻烦。如果你想要一个更积极的反馈,你的问题可以解释为什么它不起作用。它是否返回错误?它是否以一种你不想让它工作的方式工作?
void func(int a){
    byte arr[a];
}