2

以下のコードを使用すると、Tile オブジェクトの x 値が i に、y 値が j に設定されます。しかし、y 値のみが正しい値を出力すると、x 値は常に 4095 になります。

コード:

メインコード:

Tile * tiles = new Tile[4096,4096];
    for(int i = 0; i< 4096;i++)
    {
        for(int j = 0;j< 4096;j++)
        {
            tiles[i,j].x = i;
            tiles[i,j].y = j;
        }
    }

    for(int i = 0; i< 4096;i++)
    {
        for(int j = 0;j< 4096;j++)
        {
                cout << "X (Should be " <<i<<"): "<< tiles[i,j].x << " " << "Y (Should be " <<j<<"): "<< tiles[i,j].y << "\n";
        }
    }

Tile.h:

#pragma once

class Tile
{
    public:
        int x, y;
};
4

1 に答える 1

10

あなたは配列を正しく使用していません:

i,jjコンマ演算子の結果であるため、常に を返します。

Tile** tiles = new Tile*[4096];
for(int i = 0; i < 4096; i++)
    tiles[i] = new Tile[4096];

    for(int i = 0; i< 4096;i++)
    {
        for(int j = 0;j< 4096;j++)
        {
            tiles[i][j].x = i;
            tiles[i][j].y = j;
        }
    }

    for(int i = 0; i< 4096;i++)
    {
        for(int j = 0;j< 4096;j++)
        {
                cout << "X (Should be " <<i<<"): "<< tiles[i][j].x << " " << "Y (Should be " <<j<<"): "<< tiles[i][j].y << "\n";
        }
    }


   // Destruction! DON'T FORGET!
   for(int i = 0; i < 4096; i++)
       delete[] tiles[i];
   delete[] tiles; 

コンマ演算子から値を計算する場合、元のコードは次のようになります。

Tile * tiles = new Tile[4096]; // returned last 4096
    for(int i = 0; i< 4096;i++)
    {
        for(int j = 0;j< 4096;j++)
        {
            tiles[i,j].x = i; // the same as tiles[j].x = i;
            tiles[i,j].y = j; // the same as tiles[j].y = j;
        }
    }

///...
于 2013-08-22T07:50:01.363 に答える