我正在尝试通过玩Arduino Uno来学习C. 我正在审查github上的Colorduino库的代码.我想知道++应用于结构时是如何工作的.
PixelRGB在Colorduino.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)
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)