4

ArduinoUnoで遊んでCを学ぼうとしています。githubのColorduinoライブラリのコードを確認しています。++構造体に適用するとどのように機能するのか疑問に思います。

Colorduino.hPixelRGBで定義された構造体があります:

typedef struct pixelRGB {
  unsigned char r;
  unsigned char g;
  unsigned char b;
} PixelRGB;

Colorduino.cppには、演算子をポインターに適用するコードが少しあります。これはどのように作動しますか?++PixelRGB

for (unsigned char y=0;y<ColorduinoScreenWidth;y++) {
  for(unsigned char x=0;x<ColorduinoScreenHeight;x++) {
    p->r = R;
    p->g = G;
    p->b = B;
    p++;
  }
}
4

2 に答える 2

9

このコードは、構造体自体ではなく、へのポインタをインクリメントすることに注意してください。PixelRGBしたがって、++ポインタに適用した場合の結果は、その値を次のようにインクリメントするだけです。sizeof(PixelRGB)

于 2012-08-26T03:55:25.323 に答える
5

pは構造体ではなくポインタであるため、どのタイプでもポインタ演算と同じように機能します。ポインタの値はアドレスです。したがって、たとえば、nポインタに追加すると、その値が変化し、離れた新しいアドレスを指しますn * sizeof type。それで...

char *p = malloc(SOME_NUMBER * sizeof char);
p++;     // p = p + sizeof char
p += 4;  // p = p + sizeof char * 4

そして、あなたが構造体を持っているなら...

typedef struct {
    int a;
} foo;

/* ... */

foo *fp = malloc(SOME_NUMBER * sizeof foo);
fp++;    // fp = fp + sizeof foo;
fp += 4; // fp = fp + sizeof foo * 4;
于 2012-08-26T03:55:07.860 に答える