c++ - 为什么我的函数会在不同的地方两次更改数组的值?
问题描述
我有一个函数可以改变 4 个数组元素的值。它正确地做到了这一点,但它也复制了偏移量为 (1, -10) 的 4 个元素。我知道这没有多大意义,我不知道如何解释它,所以我将展示它。
这是代码:
void PlayArea::addFigure(std::array<Vector2i, 4> figure, int color)
{
printCells();
std::cout << "\n\n";
for (int i = 0; i < 4; i++)
{
int x = figure[i].x;
int y = figure[i].y;
cell[x][y] = color;
}
printCells();
std::cout << "\n\n";
}
注意 printCells 函数。它所做的是打印数组的元素。for 循环之前的一个打印全零。for 循环之后的那个会打印出类似于我在第一段中描述的内容。这是一张图片:
编辑: printCells 方法打印 10 x 20 数组单元格的内容,仅此而已。我只是添加它用于调试。这里是:
void PlayArea::printCells()
{
for (int i = 0; i < 20; i++)
{
for (int j = 0; j < 10; j++)
{
std::cout << cell[j][i] << ", ";
}
std::cout << "\n";
}
}
addFigure 方法应该只向元胞数组添加 4 个元素。我不知道它是如何存储 8 的。
编辑2:
我尝试在一个单独的项目上复制问题,这是代码:
#include "stdafx.h"
#include <SFML/Graphics.hpp>
#include <array>
#include <iostream>
#include <conio.h>
using namespace sf;
int cell[20][10] = { 0 };
void printCells()
{
for (int i = 0; i < 20; i++)
{
for (int j = 0; j < 10; j++)
{
std::cout << cell[j][i] << ", ";
}
std::cout << "\n";
}
}
int main()
{
std::array<Vector2i, 4> figure;
figure[0].x = 1;
figure[0].y = 16;
figure[1].x = 1;
figure[1].y = 17;
figure[2].x = 1;
figure[2].y = 18;
figure[3].x = 1;
figure[3].y = 19;
printCells();
std::cout << "\n\n";
for (int i = 0; i < 4; i++)
{
cell[figure[i].x][figure[i].y] = 7;
}
//cell[1][19] = 7;
printCells();
std::cout << "\n\n";
_getch();
}
每次我更改数组元素的值时,它仍然会更改 1 列和 10 行的两个值。这是一张图片:
解决方案
推荐阅读
- windows - NSSM 服务未执行批处理脚本但已创建并成功启动
- java - 检查文件/路径是别名、快捷方式还是符号链接
- python - linux 上的 uwsgi-flask 我正在尝试在 linux 上使用 uwsgi 运行flask
- r - 通过列表 RStudio 对数据框列执行操作
- c# - 如何在两次之间计算csv文件中的出现次数?
- firebase - Firebase 服务帐户私钥暴露给 admin.firestore
- android - Glide、Picasso 或 Universal Image Loader 无法在 Android 中加载 Google 存储图像
- c++ - Bron-Kerbosch 算法未按预期工作
- r - ggplot2 中分组箱线图的默认间距:如何得出正确的 position_dodge 宽度以排列几何图形?
- javascript - 过滤掉某些单词,只匹配确切的单词