Ошибка компиляции на cols
во вложенном цикле:
void FillArr(int arr[], const int ROW, const int COL) {
for (int cols = 0, num = 0; cols < COL; cols++) {
for (int rows = 0; rows < ROW; rows++, num++) {
arr[rows][cols] = num;
}
}
}
(ответа нет, комментарии есть, так что попробую написать ответ) Вы пытаетесь обратиться к одномерному массиву как к двумерному:
// здесь int arr[] тоже самое, что и int *arr
void FillArr(int arr[], const int ROW, const int COL) {
...
arr[rows][cols] = ...;
...
}
Из-за чего компилятор не понимает ваших намерений и выдает ошибку компиляции.
Исправить проблему можно двумя способами, в зависимости от того, что у вас представляет из себя двумерный массив.
arr
двумерный массив. Использовать, если входной массив был создан как int *arr[y]
(y -> количество строк) или int **arr
.// int *arr[],
void FillArr(int **arr, const int ROW, const int COL) {
for (int cols = 0, num = 0; cols < COL; cols++) {
for (int rows = 0; rows < ROW; rows++, num++) {
arr[rows][cols] = num;
}
}
}
int arr[x]
, int *arr
; еще можно ожидать int arr[y][x]
, однако придется будет преобразовывать его в int*
-> reinterpret_cast<int*>(arr)
при вызове.// int arr[],
void FillArr(int *arr, const int ROW, const int COL) {
for (int cols = 0, num = 0; cols < COL; cols++) {
for (int rows = 0; rows < ROW; rows++, num++) {
// rows * COL позволит нам перепрыгнуть определённое количество
// элементов (равняещееся количеству колонок в двумерном
// массиве умноженное на количество пройденный строчек),
// а суммирование просто сделает отступ от этого прыжка.
// Прыжком мы дойдем до нужной строки, а отступ
// позволит получить элемент в этой строке.
arr[rows * COL + cols] = num;
}
}
}
Проверял свои суждения на gcc 8.3.0; gcc -xc++ -lstdc++ -shared-libgcc -std=C++14
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Код C++, Visual Studio 2019, urlmon подключен, вызываю так:
Я хочу по битам считать определенную область памяти, первый вариант работает, второй - нет, хотя делает почти то же самое
Известно, что на доске 8×8 можно расставить 8 ферзей так, чтобы они не били друг другаВам дана расстановка 8 ферзей на доске, определите, есть...