1 / 1 / 0
Регистрация: 25.08.2012
Сообщений: 47
|
||||||
1 | ||||||
Передача двумерного массива в функцию. Ошибка "invalid types for array subscript"16.11.2014, 03:19. Показов 8079. Ответов 10
Метки нет Все метки)
(
Заранее прошу прощения, если тема уже поднималась, но я ничего дельного не нашел.
При попытке обратиться к элементам массива, указатель на который передается в функцию, выдает invalid types float[int] for array subscript Что характерно, при вызове swap() из main, ошибки нет, значит я неправильно передаю массив? Где ошибка?
0
|
16.11.2014, 03:19 | |
Ответы с готовыми решениями:
10
Ошибка error: invalid types 'int[int]' for array subscript Ошибка компиляции invalid types ‘int[int]’ for array subscript Ошибка: error: invalid types ‘int[int]’ for array subscript |
Диванный эксперт
![]() |
|||||||||||
16.11.2014, 03:34 | 2 | ||||||||||
Вы передаете в функцию swapel 1-мерный массив и пытаетесь внутри нее вызвать swap для элементов 2хмерного массива...
Добавлено через 5 минут
0
|
Вездепух
![]() ![]() ![]() 12866 / 6731 / 1809
Регистрация: 18.10.2014
Сообщений: 17,035
|
||||||||||||||||
16.11.2014, 03:50 | 3 | |||||||||||||||
Для двумерного массива объявленного как 'float B[Size][Size]' это, разумеется, работать не будет. Обычный двумерный массив несовместим с типом указатель-на-указатель.
Это даже не скомпилируется. Добавлено через 2 минуты Ошибка в том, что вы передаете в функцию указатель и почему-то полагаете, что вы с этим указателем сможете работать, как с двумерным массивом. Это бессмыслица. Тут надо заметить, что у вас в программе используется нестандартное расширение компилятора. Вот такой код
Однако, если ваш компилятор поддерживает такие массивы и вы не против воспользоваться этим нестандартным расширением, то передавать массив в вашу функцию можно так
0
|
1 / 1 / 0
Регистрация: 25.08.2012
Сообщений: 47
|
|
16.11.2014, 03:50 [ТС] | 4 |
А как правильно объявнять динамические массивы? И, соответственно, потом передавать?
Только учусь, лучше уж привыкать к хорошему сразу) Компилятор gcc
0
|
![]() ![]() 8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
16.11.2014, 04:06 | 5 |
Никак.
На языке с++ не существует динамических массивов. Вы можете воспользоваться контейнерами, которые умеют динамику. Либо через указатель работать с куском памяти, выделенном в куче.
0
|
1 / 1 / 0
Регистрация: 25.08.2012
Сообщений: 47
|
|
16.11.2014, 04:08 [ТС] | 6 |
0
|
Вездепух
![]() ![]() ![]() 12866 / 6731 / 1809
Регистрация: 18.10.2014
Сообщений: 17,035
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16.11.2014, 04:32 | 7 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() Решение
Как создать двумерный массив неконстантного размера в С++
Существует несколько способов. Рассмотрим их на примере двумерного массива 'array' размера N x M с элементами типа 'int'. При этом ни N, ни M не являются константами времени компиляции. 1. Простейший способ: вектор векторов
Синтаксис доступа - привычный 'array[i][j]'. Передача в функции - как 'vector<vector<int>> &'
2. Моделирование двумерного массива через одномерный с пересчетом индексов
Чтобы доступиться к элементу по двумерному индексу [i][j] просто выполняем пересчет индексов по формуле 'i * M + j', т.е. доступаемся к элементу 'array[i * M + j]'. (На самом деле именно так работают встроенный тип "массив" в языках С и С++ для любой размерности массива.) Передача в функцию - очевидным образом
3а. "Рваный" массив с индивидуальным выделением памяти
Передача в функции
3б. "Рваный" массив с общим выделением памяти
Освобождение памяти
Добавлено через 11 минут Разумеется, вышеприведенные разглагольствования на тему динамических массивов вам нужны только в том случае, если вам действительно нужен массив неконстантного размера в программе. Т.е. если величина 'Size', например, вводится пользователем или читается из файла, т.е. заранее не известна. Если же величина 'Size' жестко задана на стадии компиляции, то все эти усилия становятся ненужными. Просто объявите ее глобально как
8
|
3 / 3 / 0
Регистрация: 16.01.2014
Сообщений: 55
|
||||||
14.12.2014, 20:23 | 8 | |||||
@TheCalligrapher, подскажите пожалуйста, какую функцию выполняют / что означают пустые скобки "()" в конце строки
Если эти круглые скобки не указывать, не изменится ничего? Спасибо.
0
|
19411 / 10030 / 2443
Регистрация: 30.01.2014
Сообщений: 17,695
|
|
14.12.2014, 22:08 | 9 |
Изменится. С ними память инициализируется значением по-умолчанию для данного типа. В случае int - это будет 0. Если их не писать, то инициализации не будет, а элементы будут содержать случайные мусорные значения.
2
|
3 / 3 / 0
Регистрация: 16.01.2014
Сообщений: 55
|
|
16.12.2014, 16:41 | 10 |
@DrOffset, я правильно понимаю - такая инициализация гарантируется стандартом?
0
|
19411 / 10030 / 2443
Регистрация: 30.01.2014
Сообщений: 17,695
|
|
16.12.2014, 17:07 | 11 |
1
|
16.12.2014, 17:07 | ||||||
Помогаю со студенческими работами здесь
11
Ошибка в структуре: Invalid types `int[int]' for array subscript invalid types ‘double[int]’ for array subscript Invalid types 'float[int]' for array subscript
Invalid types `float[int]' for array subscript Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Циклы for в Python
py-thonny 17.03.2025
Существует множество ситуаций, когда нам нужно выполнить одно и то же действие несколько раз. Цикл for в Python — настоящий рабочий конь для большинства программистов. Если вам нужно пройтись по всем. . .
|
Предсказание ветвлений - путь к высокопроизводительному C++
NullReferenced 17.03.2025
В высокопроизводительном программировании на C++ каждый такт процессора на счету. Когда речь заходит о разработке систем с низкой задержкой — будь то высокочастотная торговля, обработка потоковых. . .
|
Паттерн CQRS в C#
UnmanagedCoder 17.03.2025
Создание сложных корпоративных приложений часто требует нестандартных подходов к архитектуре. Один из таких подходов — паттерн CQRS (Command Query Responsibility Segregation), предлагающий простую,. . .
|
Паттерн Цепочка ответственности в C#
UnmanagedCoder 17.03.2025
Цепочка ответственности — это поведенческий паттерн проектирования, который позволяет передавать запросы последовательно по цепочке потенциальных обработчиков, пока один из них не обработает запрос. . . .
|
Создаем микросервисы с NestJS, TCP и Typescript
run.dev 17.03.2025
NestJS — фреймворк, который значительно упрощает создание серверных приложений на Node. js. Его прелесть в том, что он комбинирует концепции ООП, функционального программирования и предлагает. . .
|
Гексагональная архитектура со Spring Boot
Javaican 17.03.2025
Если вы когда-нибудь сталкивались с ситуацией, когда внесение простых изменений в базу данных или пользовательский интерфейс заставляло вас переписывать весь код, то вы точно оцените элегантность. . .
|
Позиционирование Kafka Consumer и Seek-операции
Javaican 17.03.2025
Что же такое Consumer Seek в Kafka? По сути, это API-метод, который позволяет программно указать, с какой позиции (offset) Consumer должен начать или продолжить чтение данных из партиции. Без этого. . .
|
Python NumPy: Лучшие практики и примеры
py-thonny 17.03.2025
NumPy (Numerical Python) — одна из ключевых библиотек для научных вычислений в Python. Она превращает Python из просто удобного языка общего назначения в среду для проведения сложных математических. . .
|
Java Micronaut в Docker: контейнеризация с Maven и Jib
Javaican 16.03.2025
Когда речь заходит о микросервисной архитектуре на Java, фреймворк Micronaut выделяется среди конкурентов. Он создан с учётом особенностей облачных сред и контейнеров, что делает его идеальным. . .
|
Управление зависимостями в Java: Сравнение Spring, Guice и Dagger 2
Javaican 16.03.2025
Инъекция зависимостей (Dependency Injection, DI) — один из фундаментальных паттернов проектирования, который радикально меняет подход к созданию гибких и тестируемых Java-приложений. Суть этого. . .
|