2017-08-18 1 views
0

私は配列を返すようにしたい、それが上書きされた場合、それは問題ではないので、私の方法はこれです:私が得る、しかし「初期化子要素が定数ではありません」と「近い初期化」

double * kryds(double linje_1[], double linje_2[]){ 
double x = linje_1[1]*linje_2[2]-linje_1[2]*linje_2[1]; 
double y = linje_1[2]*linje_2[0]-linje_1[0]*linje_2[2]; 
double z = linje_1[0]*linje_2[1]-linje_1[1]*linje_2[0]; 
static double svar[] = {x, y, z}; 
return svar; 
} 

static double svar[] = {x, y, z};にエラーがあります。誰かがそれが何を意味するのか説明できますか?私はthis oneのような他のフォーラムの投稿を読んだが、それは本当に私の場合、すべての

+1

イニシャライザの要素は定数式ではありません。 –

+1

'static'オブジェクトのイニシャライザは、コンパイル時に評価できるものを意味する*定数式*(リテラル、リテラルに展開されるマクロ、またはそれらの要素のみを含む式)でなければなりません。 'x'、' y'、 'z'の値は実行時までは設定されないので、' static'配列の初期化子として使うことはできません。 –

答えて

2

まずには適用されません、それが言うことを意味し

  • 初期化子は、定数式でなければなりません

定義されていない動作(にすると、staticが問題を解決するが、他の問題が発生する)の代わりにstructを試してみてください。

struct point3d {double x; double y; double z; }; 
struct point3d kryds(double *linje_1, double *linje_2) 
{ 
    struct point3d result; 
    result.x = linje1[1] * linje2[2] - ... 
    result.y = ... 

    // and so on 
    return result; 
} 

それともdouble *を返さなければならない場合は、より良いよりstatic double svar[]

double *svar; 

svar = malloc(3 * sizeof(*svar)); 
if (svar == NULL) // This will almost NEVER happen, but you MUST check 
    return NULL; 
svar[0] = linje_1[1] * linje_2[2] - linje_1[2] * linje_2[1]; 
// And so on 

は後であなたは確かに知っときにfree()ポインタに覚えておく必要があるmalloc()を試みること、あなたもう使用しません。

それとも、あなたは

static double svar[3]; 

svar[0] = linje_1[1] * linje_2[2] - linje_1[2] * linje_2[1]; 
// And so on 

を主張し、あなたが私の答えで提案された解決策のいずれかで補助xyzを必要としない場合。

+1

*または*、ターゲット配列を関数の追加パラメータとして渡します。 –

+0

愚かな質問ですが、構造体をどのように出力するのですか?明らかに%f – Bassusour

+0

または 'struct point3d kryds(double * linje_1、double * linje_2){ return {構造体ポイント3d} {linje_1 [1] * linje_2 [2] * linje_2 [1]、 です。 ..、...}; } 'をC99/C11と置き換えます。 – chux

関連する問題