++运算符在指针中的行为

时间:2013-04-24 05:38:24

标签: c++ pointers

我有一个结构数组,我创建了一个指向结构中第一个元素的指针。我看到我的代码在指针上使用了++运算符,如下所示:ptrStruct++,这究竟是做什么的?转到下一个阵列位置?或者它被用作运算符重载?

这里是代码,对象来自Ogre3D:

RGBA colours[nVertices];
RGBA *pColour = colours;
rs->convertColourValue(ColourValue(1.0,0.0,0.0), pColour++); //0 colour
rs->convertColourValue(ColourValue(1.0,1.0,0.0), pColour++); //1 colour
rs->convertColourValue(ColourValue(0.0,1.0,0.0), pColour++); //2 colour

6 个答案:

答案 0 :(得分:7)

++,当应用于指针时,将指针前进到下一个项目。它通过根据指向的项目的大小进行缩放来实现。

因此,如果您char *pc指向位置0x1000pc++会将其推进到下一个char0x1001。但是,int *pi(假设sizeof (int)4)会从位置0x1000前进到0x1004

除非你在不同的指针之间进行投射,否则这通常不需要担心。我只想说:

RGBA colours[nVertices];
RGBA *pColour = colours;    // same as &(colours[0])
pColour++;                  //     now &(colours[1])

只会将pColour推进到colours[1]

答案 1 :(得分:4)

ptrStruct++

指针向前迈步并指向数组中的下一个元素。编译器知道数组中每个元素的大小,然后每个++根据该大小推进内存中的指针。

RGBA colours[nVertices];  // Assume `sizeof(RGBA)` is 4bytes
RGBA *pColour = colours;

      sizeof(a[0])                                 
     <------------>                                
     +------------+------------+-------------+--------
     |            |            |             |     
     |   4bytes   |   4bytes   |   4bytes    |  4by...   
     |            |            |             |     
     +------------+------------+-------------+--------
     ^            ^                                
     |            |                                
   before       after++ 
   pColour      pColour 

作为指向大小为4 RGBA的指针,每个++对编译器说,前进4个字节。换句话说,一步的长度是4个字节。

此外,您可以重写以下代码:

RGBA colours[nVertices];
int i = 0;
rs->convertColourValue(ColourValue(1.0,0.0,0.0), colours[i++]);
rs->convertColourValue(ColourValue(1.0,1.0,0.0), colours[i++]);
rs->convertColourValue(ColourValue(0.0,1.0,0.0), colours[i++]);

答案 2 :(得分:3)

它将递增到数组中包含的下一个内存地址。实际上,address + sizeof(array[0]).这适用于任何(完整)类型。

答案 3 :(得分:1)

您已将指针声明为

RGBA *pColour = colours;

所以做pclour ++意味着pcolour + sizeof(RGBA)

答案 4 :(得分:0)

它将前进到列表中的下一个项目。我会留下这个评论,但我还不能。

答案 5 :(得分:0)

ptrStruct ++将使ptrStruct指向数组中的下一个结构。