これは簡単な質問のようですが、頭を悩ませることはできません...
いくつかの条件に基づいて、最もエレガントな方法で配列の要素を設定したいと思います。
これは私の非コンパイル擬似コードです:
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;
}
配列のサイズは制限されているので、「floatarray[16];」のようなことができます。同様ですが、問題は明らかにcaseステートメントでの割り当てです。
私は本当に次のようなことをしたくありません:
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;
memcpy()が機能していないように見えるため、ARRAYCOPY定義を使用しています。少なくともやって
float*vec={1, 2}; memcpy(array, vec, sizeof(vec)/sizeof(*vec);
配列に値を入力しませんでした。
もっと良い解決策があるに違いないと思いますか?