1

私はこれを尋ねなければならないことを信じられないほどばかげていると感じますが、どのように戻り値を扱うのですか?

たとえば、私はこのコードを持っています:

int x = 0;

void setup(){
  Serial.begin(9600);
}

void loop(){
  int y = calc(x);
  Serial.println(y);

  delay(500);
}

int calc(int nmbr){
 int i = nmbr + 1;
 return i; 
}

xが上がるようにするにはどうすればよいですか?基本的には、0、1、2、3、4、5などになります。これはfor()で簡単に実行できることはわかっていますが、戻り値の操作方法ではなく、戻り値の操作方法を知りたいです。カウンターを作成します。

解決策はおそらく非常に簡単で、それを見ると顔をしかめるでしょうが、私は過去30分間画面を見続けており、これに完全に固執しています。

4

4 に答える 4

2

あなたは変更していませんx、あなたは別の変数を変更しています、あなたは値でnmbr渡しxているので、それはのコピーですx、あなたはそれを参照で渡すことができます、またはxグローバルなのであなたはこれをすることができます:

int calc() {
 return x++;
}

しかし実際には、forループを使用する必要があります:)

int x;
for (x=0; x<10; x++) {
  Serial.println(x);
}
于 2012-10-25T11:46:35.550 に答える
1

Muxの答えは良いです。さらに品種を追加します。まず、関数の戻り値を次のように割り当てますx

loop() {
    x = calc( x );
    Serial.println( x );
}

x次に、call-by-referenceを使用します。ここでは、の値の代わりにポインタを渡しますx

void loop() {
    int y = calc( &x );
    Serial.println( y );
}

int calc( int *nmbr ) {
    *nmbr++;
}

「Cプログラミング言語」を読んで、言語とその可能性のコツをつかむのは本当に良いことです。幸運を :-)

乾杯、

于 2012-10-25T11:55:05.457 に答える
0

試す:

int y = 0;

void setup(){
  Serial.begin(9600);
}

void loop(){
  y = calc(y);
  Serial.println(y);

  delay(500);
}

int calc(int nmbr){
 int i = nmbr + 1;
 return i; 
}
于 2012-10-25T11:51:50.277 に答える
0

intとして宣言する代わりに、静的intを宣言することができます。

#include <stdio.h>


void func() {
    static int x = 0; // x is initialized only once across three calls of func() and x will get incremented three 
                          //times after all the three calls. i.e x will be 2 finally
    printf("%d\n", x); // outputs the value of x
    x = x + 1;
}

int main() { //int argc, char *argv[] inside the main is optional in the particular program
    func(); // prints 0
    func(); // prints 1
    func(); // prints 2
    return 0;
}
于 2014-01-09T07:44:20.200 に答える