这似乎是一个简单的问题,但我无法理解它......
我想根据某些条件以最优雅的方式设置数组的元素。
这是我的非编译伪代码:
float*array=NULL;
switch(elements) {
case 1: array={1}; break;
case 2: array={7, 1}; break;
case 3: array={3, 2, -1}; break;
case 4: array={10, 20, 30, 40}; break;
default:break;
}
数组的大小是有限的,所以我可以做一些类似'float array[16];'的事情 同样,但问题显然是案例陈述中的分配。
我真的不想做类似的事情:
case 2: array[0]=1; array[1]=2;
我目前(笨拙)的实现是:
#define ARRAYCOPY(dest, src) for(int i=0;i<sizeof(src)/sizeof(*src);i++)dest[i]=src[i]
// ...
case 2: do {float*vec={1, 2}; ARRAYCOPY(array, vec); } while(0); break;
我正在使用 ARRAYCOPY 定义,因为 memcpy() 似乎不起作用。至少在做
float*vec={1, 2}; memcpy(array, vec, sizeof(vec)/sizeof(*vec);
没有将任何值填充到数组中。
我想一定有更好的解决方案?