2016-10-06 4 views
1

私は3つの関数を持っていますが、それぞれ次の関数を呼び出していくつかの値を渡します。不思議なことに、私が3番目の関数に複数の呼び出しを行う2番目の関数では、呼び出しの間で値の1つが変化します。そして、この変数は確実にローカルです。何か不足していますか?Arduino関数の変数値が関数呼び出しの間で変化する

void functionA(...){ 
    //Something... 
    int i=1,j=1,k=2; 
    functionB(i,j,k); 
} 

void functionB(int i,int j,int k){ 
    String X=""; 
    Serial.print(i);//Gives 1 
    if(j==1) 
    X="hello world"; 
    functionC(i,j,k,X);//Call 1 to functionC 
    Serial.print(i);//Gives 0 !!!!!!!!!!!!!!!!!!!!!!!! 
    if(j==2) 
    X="hello world2"; 
    functionC(i,j,k,X);//Call 2 to functionC 
} 

void functionC(int i, int j, int k, String X){ 

    if(i) 
    //Do something 
    else 
    //Do somethingelse 

} 

マイ実験

void functionC(int i, int j, int k, String X){ 
     //Print i here. No difference with the result. 
     if(i) 
     //Do something 
     else 
     //Do somethingelse 
     //But if I Print i here again, then it is working. As in, "i" does not change anymore. between each call to functionC 
    } 
+0

あなたの例ではfunctionCを1回呼び出すことができます。 – Willwsharp

+0

申し訳ありません。更新された質問/コード – aVC

+1

2番目の呼び出しの後に 'i'をもう一度印刷してください – acornagl

答えて

0

どちらかあなたの周りにいくつかのポインタを渡しているかfunctionCは、メモリと、いくつかのファンキーなものをやっています。これらの2つのオプション以外にも、変数の値があなたの例のように単純に変わる理由がわかります。

+1

'functionC()'手続きのコードを提供していないと助けてくれることに私は同意します。 – acornagl

+0

@acornagl申し訳ありませんが、コードは非常に大きかったので、構造を示したいと思いました。私の間違い。私はコードを更新しました。また、遊んだ後のいくつかの発見。 – aVC

+0

@aVC、私たちがあなたを助けようとしているのではないかと心配しないでください。答えを得るために必要なすべての情報を私たちに提供しようとしています。 – acornagl

関連する問題