Форум программистов, компьютерный форум CyberForum.ru

Работа с двухмерным динамеческим массивом через указатель - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как повернуть элементы матрицы на 90 градусов против часовой стрелки? http://www.cyberforum.ru/cpp-beginners/thread1306472.html
ЗАДАНИЕ: Дана матрица. Повернуть все её элементы вокруг центра на 90 градусов против часовой стрелки. #include <iostream> #include <stdlib.h> #include <time.h> using namespace std; int main() {
C++ Динамические массивы с передачей в функции Здравствуйте, завтра у меня обязательная контрольная работа, без права пересдачи, я переболел ветрянкой и не смог разобраться, времени не хватает, помогите, напишите пожалуйста программу на С++(мы сдаем на Borland C++). Задание: вводить неодноразово и обрабатывать массивы, размещая их в динамической памяти.Для каждого из заданий использовать отдельную функцию с передачей параметров в две... http://www.cyberforum.ru/cpp-beginners/thread1306466.html
C++ Выяснить, является ли натуральное число N точным квадратом
Составит линейную логическую программу, печатающую значение 1, если указанное высказывание является истинным, и 0 – в противном случае: натуральное число N является точным квадратом. (не забегая вперёд, по линейным программам)
C++ Как создать глобальную константу для всего проекта?
как создать?
C++ Передача двухмерного массива в функцию http://www.cyberforum.ru/cpp-beginners/thread1306450.html
Товарищи, помогите, пожалуйста, с таким вопросом: Я хочу сделать функции ввода и вывода элементов двухмерного массива, да так, чтобы эти функции были универсальными и принимали аргументы в качестве параметров. Но в описании функции требуется указывать его размерность: void filling_array (arr); Вопрос: как написать функцию, чтобы эти размеры задавались при вызове? Заранее спасибо)
C++ Написать функцию для сортировки порядка строк в файле по возрастанию их длины Дан текстовый файл состоящий из некоторого количества строк.написать функцию для сортировки порядка строк в файле по возрастанию их длины подробнее

Показать сообщение отдельно
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
2909 / 1445 / 397
Регистрация: 18.10.2014
Сообщений: 2,669
21.11.2014, 02:21     Работа с двухмерным динамеческим массивом через указатель
Цитата Сообщение от true_bugmaker Посмотреть сообщение
Я только недавно указывал на K&R и на спецификацию.
Очевидно, вы что-то неправильно поняли в K&R и/или в спецификации.

Цитата Сообщение от true_bugmaker Посмотреть сообщение
Для int a[i][j], a[i] это массив указателей на массивы из целых чисел.
Ни в коем случае!!! Никаких указателей там нет и никогда не было.

Если массив объявлен как 'int a[10][20]' и мы применяем к нему 'a[i][j]', то 'a[i]' - это i-тый объект типа 'int[20]' внутри 'a'. Это i-тый одномерный подмассив. Это подобъект типа "массив int[20]". И (ключевой момент!) в таком контексте он подвергается неявному стандартному преобразованию типа, называемому array-to-pointer conversion (cм. 4.2 в С++03). Это преобразование порождает временное значение - указатель на первый элемент подмассива 'a[i]' и далее работа идет уже с этим указателем.

Ключевой момент здесь в том, что никакие указатели физически нигде не хранятся. Никакого массива указателей нет и никогда не было. Указатель возникает только воображаемый, концептуальный, временный, как промежуточный результат выполнения array-to-pointer conversion.

Именно об этом подробно написано в той части спецификации, которую вы же сами и цитировали. Именно об этом написано и в K&R.

Добавлено через 1 минуту
Цитата Сообщение от true_bugmaker Посмотреть сообщение
То есть она не может использоваться как многомерный массив?
Почему не может? Может конечно. Я лишь говорю, что это другой способ представления многомерных массивов, который на физическом уровне отличается от представления встроенных многомерных массивов языков С и С++. У каждого способа свои преимущества, недостатки и области применения.

В частности, встроенный языковый массив 'T a[M][N]' требует ровно 'M * N * sizeof(T)' памяти. А вот "jagged array" требует сверх этого еще дополнительно 'M * sizeof(T *)' памяти для явного хранения массива указателей.
 
Текущее время: 14:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru