Размер подсчета двух двойного массива, созданного как двойной указатель - PullRequest
1 голос
/ 22 мая 2019

У меня проблема с подсчетом количества столбцов или строк (это не имеет значения, потому что это всегда будет квадратная матрица) этого массива, созданного как показано ниже:

    float **arr1 = new float*[3];

    for (int i = 0; i < 3; i++){
        arr1[i] = new float[3];
    }

    for (int i = 0; i < 3; i++){
        for (int i = 0; i < 3; i++){
            arr1[i][j] = i;
        }
    }

Я пробовал много вариантов, но явсегда получаю результат: 1, например:

    sizeof(arr1[0])/sizeof(arr1[0][0]);

Если вы знаете решение, пожалуйста, поделитесь со мной.

1 Ответ

1 голос
/ 22 мая 2019

sizeof() возвращает только размер указателя.

Существует только один способ получить размер массива.Создайте класс / структуру, которая обернет необработанный массив , а также содержит его размер.

К счастью, вам не нужно создавать такую ​​структуру, потому что с C ++ 11 вы можете использовать std::array, который делает это для вас и именно то, что вам нужно.Вы можете переписать ваш пример следующим образом:

std::array<std::array<float, 3>, 3> square; // size 3x3

    for(size_t i = 0; i < square.size(); ++i)
    {
        for(size_t j = 0; j < square[0].size(); ++j)
            square[i][j] = i;
    }

Метод size() дает вам размер внутреннего массива.

Надеюсь, он вам поможет.

...