C 加号加号(+;+;)运算符应用于结构时的行为是什么?

C 加号加号(+;+;)运算符应用于结构时的行为是什么?,c,struct,arduino,C,Struct,Arduino,我想通过玩Arduino Uno来学习C。我正在复习功课。我想知道当应用于结构时,++是如何工作的 有一个PixelRGBstruct定义在: 在中,有一段代码将++运算符应用于像素RGB指针。这是怎么回事 for (unsigned char y=0;y<ColorduinoScreenWidth;y++) { for(unsigned char x=0;x<ColorduinoScreenHeight;x++) { p->r = R; p->g =

我想通过玩Arduino Uno来学习C。我正在复习功课。我想知道当应用于结构时,
++
是如何工作的

有一个
PixelRGB
struct定义在:

在中,有一段代码将
++
运算符应用于
像素RGB
指针。这是怎么回事

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++;
  }
}
for(无符号字符y=0;yg=G;
p->b=b;
p++;
}
}

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;

注意,此代码将增加指针
PixelRGB
,而不是结构本身。
因此,当应用于指针时,
++
的结果只是将其值增加
sizeof(PixelRGB)

我真的不懂c或arduino,所以我不会将其作为答案发布,但可能它会增加所有公共字段?在这种情况下,你会增加指向一个结构的指针,该结构是p,所以现在p将指向下一个像素RGBISN,这不只是指针算法吗?@nhahtdh…可能是我需要再次查找和阅读的内容。@Tanmoy,我我想你可能是对的请注意,
p
以空指针开始,对其执行算术有未定义的行为。@KeithThompson:是的,我想到了,但我认为这与此无关。因为这是一个初学者…更改它可能是一个好主意。请注意,
*sizeof char
是多余的,因为
sizeof char的定义是1。@基思汤普森:我知道
sizeof char
保证为1,但为了说明起见,我认为最好包含它。你的评论有点误导。从技术上讲,
p+(4*sizeof char)
增加指向
(4*sizeof char)*(sizeof char)的指针值。”
。可能只是一些英文单词?或者可能转换为一些无符号整数类型?
typedef struct {
    int a;
} foo;

/* ... */

foo *fp = malloc(SOME_NUMBER * sizeof foo);
fp++;    // fp = fp + sizeof foo;
fp += 4; // fp = fp + sizeof foo * 4;