首页 > 解决方案 > 为什么我的函数会在不同的地方两次更改数组的值?

问题描述

我有一个函数可以改变 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 行的两个值。这是一张图片:

在此处输入图像描述

标签: c++visual-studio

解决方案


推荐阅读