4

我正在尝试通过玩 Arduino Uno 来学习 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 回答