使用下面的代码时,它将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;
};
答案 0 :(得分:10)
您没有正确使用数组:
i,j
将始终返回j
,因为这是逗号运算符的结果。
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;
}
}
///...