Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/91: Рейтинг темы: голосов - 91, средняя оценка - 4.87
4 / 4 / 1
Регистрация: 07.10.2012
Сообщений: 228

Malloc. Двумерные массивы

13.10.2012, 17:16. Показов 18014. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Выделяем динамическую память.


1) int *M=(int*)malloc(sizeof(int)*N*N)

2) int **M=(int **)malloc(N*sizeof(int*)
for (int i=0; i<N; i++)
M[i] = (int*) malloc (N*sizeof(int)


Правила чтения этой вышенаписанной ерунды? Как это читается? и где можно подробно про это почитать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.10.2012, 17:16
Ответы с готовыми решениями:

Двумерные массивы.
для заданной матрицы размером 8x8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом. Как это вообще? Второй день голову...

Получить новую матрицу, переставляя четверти исходной матрицы размера N×N крест накрест
Помогите решить задачку!!!!!! Дана действительная квадратная матрица порядка 2N. Подучить новую матрицу, переставляя ее блоки размера N х...

Двумерные массивы
Никогда особо раньше не занимался программирование,больше как то математикой.И вот на первом курсе стали изучать язык Си на лекциях.На...

6
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
13.10.2012, 19:32
1. Выделяем кусок памяти, достаточный для размещения N2 интов. Указатель на его начало сохраняем в M. Это можно понимать как одномерный массив из N2 элементов (доступ по M[i]), так и как двумерный из N × N (доступ по M[N*i + j])

2. Выделяем кусок памяти, достаточный для размещения N указателей. Потом выделяем N кусков памяти, достаточных для размещения по N интов в каждом. Сохраняем их в первом массиве. Указатель на начало массива указателей на массивы сохраняется в M. Эту штуку можно использовать как массив N × N с помощью M[i][j].
1
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
13.10.2012, 19:32
Если i - строка, j-столбец
В первом случае:
C
1
a=M[i*N+j]
Во втором полностью идентично статическим массивам:
C
1
a=M[i][j]
1
13.10.2012, 19:39

Не по теме:

Цитата Сообщение от alexcoder Посмотреть сообщение
Во втором полностью идентично статическим массивам
Синтаксически идентично. Если смотреть в памяти, то многомерные массивы размещаются в одном сплошном куске и адресуются через кучку сдвигов.

1
Кандёхаем веселее!
 Аватар для MLPMan
296 / 330 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
13.10.2012, 20:53
Мне в C++ удобнее использовать "new", так текст менее навороченый, легче читать.
Например, создание матрицы 10x10, эквивалентно коду 2 :
C++
1
2
3
4
int N, i;
N=10;
int** M = new int*[N]; //Выделяем память для M - массива из 10 массивов
for (i=0; i<N; i++) M[i] = new int[N]; //Выделяем память для каждого "подмассива"
0
4 / 4 / 1
Регистрация: 07.10.2012
Сообщений: 228
13.10.2012, 22:09  [ТС]
Спасибо за ответы.

Но я даже не понимаю как работает доступ M[N*i+j]. М(как я понимаю имя массива). Допустим, число элементов N=10, нам надо получить значение ячейки М[5][3]. Тогда M[10*5+3] равно 53. Что значит эта цифра?
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
14.10.2012, 00:38
Это индекс в большоооом одномерном массиве. На самом деле™ двумерные массивы представляются как одномерные. Первые 10 элементов — это M[0][...], вторые 10 — это M[1][...] и т. д.

Но это касается статически создаваемых. И когда такая адресация делается руками. Если делать malloc, а потом ещё malloc в цикле, то немного не так.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.10.2012, 00:38
Помогаю со студенческими работами здесь

Двумерные массивы
Помогите люди добрые:) Дана целочисленная прямоугольная матрица, определить: 1) Кол-во отрицательных эл-тов тех строк, которые содержат...

Поменять местами максимальный и минимальный элементы главной диагонали матрицы
Составить программу обмена местами максимального и минимального элементов главной диогонали матрицы 4x4. зарание спасибо!

Двумерные массивы
Привет всем! если есть у кого время, посмотрите что можно сделать, нужна ваша помощь! Сформировать одномерный массив B из максимальных...

Двумерные массивы
#include &lt;iostream&gt; using namespace std; int main() { int n, m, s; int a; cin &gt;&gt; n &gt;&gt; m; s = 0; for (int i = 0; i &lt; n;...

Заполнить матрицу указанным образом
Заполнить двумерный массив таким образом: 111 | 122 | ... | 120 ... | ... | ... | ... 30 | ... | 22 | 21 11 | 12 | | 20 10 | ......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru