【发布时间】:2016-08-09 02:27:08
【问题描述】:
这样的函数:
int * getRandom( ) {
static int r[10];
int i;
/* set the seed */
srand( (unsigned)time( NULL ) );
for ( i = 0; i < 10; ++i) {
r[i] = rand();
printf( "r[%d] = %d\n", i, r[i]);
}
return r;
}
这是否可以在 Vivado HLS 中使用?如果可能,我如何初始化一个未知大小的数组,因为我不能再使用static 和malloc?
【问题讨论】:
-
在标准 C 中,您不能从函数返回数组 — 您可以返回 OK 指针(因此显示的代码是允许的,尽管它显然存在重入和线程问题)。如果您不能使用
static或malloc()等,则需要将数组传递给函数以供其填充,而不是返回数组。那么分配空间就是调用者的责任。 -
@JonathanLeffler 所以你的意思是我可以将全局数组设置为函数参数并为每个元素赋值,这样我就可以在不使用静态和 malloc 的情况下获取数组?
-
是的,或者是一个本地数组,或者你想的任何其他类型的数组。我认为适当的实现可能是:
void getRandom(int n_vals, int *i_vals) { for (int i = 0; i < n_vals; i++) i_vals[i] = rand(); },但可能的变化是大量的。如果您真的需要,您可以恢复打印;如果你真的想打电话,你甚至可以打电话给srand(),但你应该只打电话一次。然后,您可以拥有void somefunc(void) { int data[20]; getRandom(15, data); …use data…; }或static int data[20]; void somefunc(void) { getRandom(18, data); …use data…; }或其他变体。 -
@JonathanLeffler 谢谢!你的回答解决了我的问题。
标签: c arrays vivado vivado-hls