Почему моя функция изменяет значения массива дважды в разных местах? - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть функция, которая изменяет значения 4 элементов массива. Он делает это правильно, но также делает копию 4 элементов со смещением (1, -10). Я знаю, что это не имеет особого смысла, и я не знаю, как это объяснить, поэтому я просто покажу это.

Вот код:

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 функция. Он печатает элементы массива. Тот, что перед l oop, печатает все нули. Тот, что после l oop печатает что-то вроде того, что я описал в первом абзаце Вот изображение:

Console output

Редактировать: Метод printCells печатает содержимое ячейки массива 10 на 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 строк друг от друга. Вот изображение:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...