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

Редактор многомерных динамических массивов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Использование set http://www.cyberforum.ru/cpp-beginners/thread543217.html
Приветствую. Что-то я совсем глупый вопрос задам, но понять, где тут ошибка никак не могу: #include <iostream> #include <vector> #include <set> #include <utility> typedef std::set <std::pair <std::string, std::string> > myData;
C++ Архиваторы Доброго всем дня. Может ли кто-нибудь посоветовать простые программы по созданию архиватора? Обыскала чуть ли не весь интернет, но ничего нормального не нашла. В программировании не разбераюсь, а потому помощи прошу у вас) Заранее благодарю. http://www.cyberforum.ru/cpp-beginners/thread543206.html
создание классов C++
создать класс который осуществляет вывод на экран таблицы умножения с++
C++ Составить массив B так, чтобы элементы массива A[0..6, 0..6] следовали в нем в последовательности диагоналей параллельно побочной диагонали
Дали лабораторную работу по информатике Задание: Составить массив В так, чтобы элементы массива A следовали в нем в последовательности диагоналей параллельно побочной диагонали и начинались с a, a, a... Помогите! Двумерный массив создаю, а дальше не знаю как. #include <stdio.h> #define N 7 #define M 7 #define N_MAX 50 #define N_MIN 1 int main(void) {
C++ Почему выдает ошибку в строке "src.erase(p);" http://www.cyberforum.ru/cpp-beginners/thread543188.html
Задача из Bjarne Stroustrup - "The C++ Programming Language(3rd edition)": 6.3. (*2) Read a sequence of possibly whitespaceseparated (name,value) pairs, where the name is a single whitespaceseparated word and the value is an integer or a floatingpoint value. Compute and print the sum and mean for each name and the sum and mean for all names. 6.12. (*2) Modify the program from §6.6 to also...
C++ Заменить в строке все цифры 0, 1, 2, 3, ....., 9 на "ZERO","ONE","TWO","THREE", ....., "NINE" соответственно Совсем недавно, точнее сейчас, доделал программу, которая выполняет следующее задание: Заменить в строке все цифры 0, 1, 2, 3, ....., 9 на "ZERO","ONE","TWO","THREE", ....., "NINE" соответственно. В программе использовались структуры, функции, файлы(ввод/вывод). По поводу ввода: он не совсем корректно работает. Что я имею ввиду: допустим, в файле несколько строк. В программе задается сколько... подробнее

Показать сообщение отдельно
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
09.04.2012, 17:20     Редактор многомерных динамических массивов
короче мой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
int** allocate2d(int m, int n){
  int** ppi;
  int* pi;
  int i;
  ppi=(int**)malloc(m*sizeof(int*));
  pi=(int*)malloc(n*m*sizeof(int));
  for (i=0; i<m*n; i+=n){
    ppi[i]=pi+i;
  }
  return ppi;
}
Но так как ТС по-видимому только начал изучать Си, в указателях ему ещё предстоит разбираться.
Про это я и говорил выше. В Си, в отличие от Паскаля, не разобравшись в работе памяти, с массивами, а тем более с динамическими 2d массивами лучше не начинать работать.

Добавлено через 37 минут
Цитата Сообщение от Hqw33 Посмотреть сообщение
int arr[row][col];
Hqw33, то что ты объявил - это массив размера row из row штук массивов размера col
массив массивов.
Компьютерная память вообще линейна, все 2D 3D и прочие массивы существуют только в нашей голове.
В си нам даётся только одномерный массив,
Для обращения к массиву в памяти, нам нужен только адрес его первого элемента
То есть в row содержится адрес начала массива, применяя к которому оператор []
мы совершаем действие аналогичное *(arr+i), которое в свою очередь возвращает нам i-й ряд
Но i-й ряд тоже является массивом из column элементов, а значит хранится в памяти как адрес первого элемента
Применяя к нему оператор разадресации получаем *( *(arr+i) + j ) это и будет эквивалентно arr[i][j]
Но это не значит что массив многомерен.
Если посмотрите в мой пример, в нём я все m*n штук элементов создаю в одном линейном куске памяти,
И затем Создаю массив указателей, которые уже указывают, откуда в этом куске начинается первая строка, откуда вторая, откуда i-я
Через возвращаемый указатель на указатель мы можем обращаться к массиву, как к двумерному,
но в памяти он лежит одним линейным куском размера m*n
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru