2

構造体の配列があり、構造体の最初の要素へのポインターを作成しました。++私のコードでは、次のようにポインタで演算子が使用されているのを見てきました: 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
4

6 に答える 6

7

++、ポインターに適用されると、そのポインターを次のアイテムに進めます。これは、ポイントされているアイテムのサイズに基づいてスケーリングすることによって行われます。

char *pcそのため、 location を指している場合0x1000pc++はそれを次のchar、またはに進め0x1001ます。ただし、int *pi( が であると仮定しsizeof (int)て) は からに4進みます。0x10000x1004

これは、異なるポインター間でキャストする場合を除き、通常は気にする必要はありません。次のように言えば十分です。

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

pColourを指すように進むだけcolours[1]です。

于 2013-04-24T05:42:10.550 に答える
4
ptrStruct++

ポインターが前に進み、配列内の次の要素を指します。コンパイラは、配列内の各要素のサイズを認識し、そのサイズに++応じてメモリ内のポインターをそれぞれ進めます。

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

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

RGBAサイズ 4の a へのポインターとして、それぞれ++がコンパイラーに 4 バイト先に進みます。つまり、1 ステップの長さは 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++]);
于 2013-04-24T05:40:02.747 に答える
3

配列に含まれる次のメモリアドレスにインクリメントします。事実上、address + sizeof(array[0]).これはどの (完全な) タイプでも機能します。

于 2013-04-24T05:43:04.727 に答える
1

ポインターを次のように宣言しました

RGBA *pColour = colours;

したがって、 pclour++ は pcolour + sizeof(RGBA) を意味します

于 2013-04-24T05:41:57.063 に答える
0

リストの次の項目に進みます。これをコメントとして残しますが、まだできません。

于 2013-04-24T05:39:15.260 に答える
0

ptrStruct++ は、ptrStruct が配列内の次の構造体を指すようにします。

于 2013-04-24T05:43:18.260 に答える