Форум программистов, компьютерный форум 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...
C++ Динамические массивы с передачей в функции Здравствуйте, завтра у меня обязательная контрольная работа, без права пересдачи, я переболел ветрянкой и не смог разобраться, времени не хватает, помогите, напишите пожалуйста программу на С++(мы... http://www.cyberforum.ru/cpp-beginners/thread1306466.html
C++ Выяснить, является ли натуральное число N точным квадратом
Составит линейную логическую программу, печатающую значение 1, если указанное высказывание является истинным, и 0 – в противном случае: натуральное число N является точным квадратом. (не забегая...
C++ Как создать глобальную константу для всего проекта?
как создать?
C++ Передача двухмерного массива в функцию http://www.cyberforum.ru/cpp-beginners/thread1306450.html
Товарищи, помогите, пожалуйста, с таким вопросом: Я хочу сделать функции ввода и вывода элементов двухмерного массива, да так, чтобы эти функции были универсальными и принимали аргументы в...
C++ Вывести таблицу значений функции Мастера, помогите написать программу 4 варианта, а то совсем ничего не получается подробнее

Показать сообщение отдельно
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3826 / 2084 / 532
Регистрация: 18.10.2014
Сообщений: 3,699
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 *)' памяти для явного хранения массива указателей.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru