应用于结构时,plus plus(++)运算符的行为是什么?

Eri*_*ver 4 c struct arduino

我正在尝试通过玩Arduino Uno来学习C. 我正在审查github上的Colorduino库代码.我想知道++应用于结构时是如何工作的.

PixelRGBColorduino.h中定义了一个结构:

typedef struct pixelRGB {
  unsigned char r;
  unsigned char g;
  unsigned char b;
} PixelRGB;
Run Code Online (Sandbox Code Playgroud)

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++;
  }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*lin 9

请注意,这段代码递增指针PixelRGB,而不是结构本身.因此,++应用于指针时的结果只是递增其值sizeof(PixelRGB)


Ed *_* S. 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
Run Code Online (Sandbox Code Playgroud)

如果你有一个结构......

typedef struct {
    int a;
} foo;

/* ... */

foo *fp = malloc(SOME_NUMBER * sizeof foo);
fp++;    // fp = fp + sizeof foo;
fp += 4; // fp = fp + sizeof foo * 4;
Run Code Online (Sandbox Code Playgroud)