C++ C++;奇异值重置
使用下面的代码时,它将平铺对象的x值设置为i,y值设置为j。但是如果我只打印y值是正确的,那么x值总是4095 代码: 主要代码:C++ C++;奇异值重置,c++,C++,使用下面的代码时,它将平铺对象的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;
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";
}
}
您没有正确使用阵列:
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=新Tile*[4096];
对于(int i=0;i<4096;i++)
瓷砖[i]=新瓷砖[4096];
对于(int i=0;i<4096;i++)
{
对于(int j=0;j<4096;j++)
{
tiles[i][j].x=i;
瓷砖[i][j].y=j;
}
}
对于(int i=0;i<4096;i++)
{
对于(int j=0;j<4096;j++)
{
难道我不知道你想用Tile[40964096];
和所有类似的访问来做什么,但我肯定它没有达到你的目的。你是在和Tile[4096]发生冲突,基本上是在做Tile[4096]如果你想要一个2d数组,你需要使用两组方括号,而使用new
有点麻烦:你有什么迫切的理由使用原始(c++风格)数组吗?如果没有,那么我强烈建议使用std::vector
。当试图编译“Tile*tiles=new Tile[4096][4096],我得到了这个错误:2 IntelliSense:类型为“Tile(*)[4096]”的值不能用于初始化类型为“Tile*”@user1990950的实体请参阅我对该问题的评论中的链接。
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;
}
}
///...