Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.75
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
#1

Таблица Пифагора через динамические масивы - C++

25.05.2010, 18:28. Просмотров 3551. Ответов 21
Метки нет (Все метки)

НЕ могу понять динамические масивы. Объясните как этот код работает.
Вот пишу пример с книги.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// таблица Пифагора
#include <stdio.h>
#include <conio.h>
 
int main() {
   int i, j;
// 1. создание
   int **m = new int *[10]; //Это объявление указателя с 2-ной звёздочкой это как ?
                                   //И вот это ниже объясните  
   for(i = 0; i < 10; i++)  
      m[i] = new int [10];
// 2. инициализация
   for(i = 0; i < 10; i++)
      for(j = 0; j < 10; j++)
         m[i][j] = (i + 1)*(j + 1);
// 3. вывод
   for(i = 0; i < 10; i++) {
      for(j = 0; j < 10; j++)
         printf("%2d ", m[i][j]);
      printf("\n");
   }
// 4. удаление
   for(i = 0; i < 10; i++)
     delete [] m[i];
   delete [] m;
 
   getch();
   return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2010, 18:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Таблица Пифагора через динамические масивы (C++):

Динамические масивы - C++
Помогите пожалуста !! Сформировать одномерный динамический массив целых чисел. Все положительные элементы массива перенести в начало...

Динамические масивы - C++
Помогите пожалуста. Составить программу, которая вставляет в непустой список L, элементы которого упорядочены по не убыванию, новый...

Динамические масивы - C++
Помогите написать прошку Составить программу, заполняющую список последовательностью случайных различных целых чисел и суммирующую те...

Динамические одномерные масивы - C++
Не могу создать новый размер динамического массива. Статический работает как надо (мусор присутствует только в начале), а динамический нет...

Динамические масивы - параметры функций - C++
Даны действительные числа A1.....An. Получить: max (A1+An; A2+An-1;......A15+An-2). Обязательно использовать динамический масив!!! ...

Масивы-арифм. прогрессия и таблица. 2задания. - C++
Помогите решить до конца эти задания: 1. Определить, является ли введёный масив а)арифметической прогрессией с шагом д ...

21
nkomynist
0 / 0 / 0
Регистрация: 22.05.2010
Сообщений: 1
25.05.2010, 19:10 #2
C++
1
int **m = new int *[10];
ет указатель на указатель ...тойсь по сути здесь ты обявляеш массив указателей на int
C++
1
m[i] = new int [10];
а здесь ты выделяеш память для масива целых чисел, а в указатель записываеш адрес первого элемента
0
besh]<a
13 / 11 / 1
Регистрация: 02.11.2009
Сообщений: 194
25.05.2010, 19:22 #3
C++
1
int **m = new int *[10];
это типа так, ты создал 10 указателей
+ + + + + + + + + +


C++
1
2
for(i = 0; i < 10; i++)  
      m[i] = new int [10];
а эти указатели создали по 10 переменных каждый
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
1
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
25.05.2010, 20:03  [ТС] #4
Если так написать:
Код
nt **m = new int **[10]; //Это объявление указателя на трёхмерный масив?
И вот это:
C++
1
2
int **m = new int *[10];//Почему здесь одна квадратная скобка? 
Объясните понятней эту строку. Это объявление указателя m на 10 масивов что ли?
Теперь это:
C++
1
m[i] = new int [10]; //Это уже создание самого масива, на который указывал указатель **m?
0
kazak
3051 / 2372 / 160
Регистрация: 11.03.2009
Сообщений: 5,437
Завершенные тесты: 1
25.05.2010, 21:33 #5
int **m - указатель на указатель, т.е. переменная содержащая адрес другого указателя.
m = new int *[10] - выделяет память для 10 указателей на int и записывает адрес первого из них в m, обратиться к другим указателям можно с помощью операции индексации - m[i], m без индекса эквивалентен записи m[0].
m[i] = new int [10] - выделяет память для 10 чисел типа int и записывает адрес первого числа в m[i], обратится к следующим числам можно с помощью той же индексации m[i][j]. m[i] эквивалентен m[i][0]
0
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
25.05.2010, 23:01  [ТС] #6
Почему 2 раза встречается слово new?
0
kazak
3051 / 2372 / 160
Регистрация: 11.03.2009
Сообщений: 5,437
Завершенные тесты: 1
25.05.2010, 23:06 #7
Упрощенно говоря первый new задает количество строк в массиве, второй - количество элементов в строке.
1
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
25.05.2010, 23:15  [ТС] #8
Немного не поняли. Меня интересует вот этот кусок.
C++
1
2
3
int **m = new int *[10]; //Это выделение памяти под масив указателей
   for(i = 0; i < 10; i++)
      m[i] = new int [10]; //А здесь зачем выделять?
Добавлено через 4 минуты
А да ,всё верно вы сказали.
0
Андрейка
421 / 225 / 27
Регистрация: 25.03.2009
Сообщений: 744
25.05.2010, 23:18 #9
mister2010, далее если интересно почему delete везде для массивной версии с оператором [] , потому что каждый m[i] 'указывает' на одномерный массив , так и сам m указывает опять же на массив указателей..
0
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
25.05.2010, 23:40  [ТС] #10
Кстати да, по поводу делете совсем забыл спросить.
for(i = 0; i < 10; i++)
delete [] m[i];
delete [] m;
Скажите, этот цикл за 10 итерацией в первом delete [] m[i]
удаляет все строки, то есть 10 строк?
А delete [] m; Сам указатель на масив указателей?
А скобки квадратные после делете зачем, они всегда должны быть пустыми?
0
kazak
3051 / 2372 / 160
Регистрация: 11.03.2009
Сообщений: 5,437
Завершенные тесты: 1
26.05.2010, 11:28 #11
Правильно сказать освобождает память. А так все верно понял.
0
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
26.05.2010, 14:04  [ТС] #12
Извиняюсь прошёл день немного подзабыл насчёт вот этого.
Вот это---> *[10] ссылается на это?----> m[i]
0
kazak
3051 / 2372 / 160
Регистрация: 11.03.2009
Сообщений: 5,437
Завершенные тесты: 1
26.05.2010, 14:26 #13
Цитата Сообщение от mister2010 Посмотреть сообщение
Вот это---> *[10] ссылается на это?----> m[i]
Если ты имеешь в виду new int *[10], то он "создает" m[i]

Цитата Сообщение от mister2010 Посмотреть сообщение
А скобки квадратные после делете зачем, они всегда должны быть пустыми?
Квадратные скобки указывают delete, что освобождаемая память была выделена под массив.
0
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
26.05.2010, 14:32  [ТС] #14
C++
1
2
3
int **m = new int *[10];        // Я имею ввиду вот это *[10];                    
   for(i = 0; i < 10; i++)  
      m[i] = new int [10];         //ссылается на это? ----> m[i] правильно я понимаю?
0
kazak
3051 / 2372 / 160
Регистрация: 11.03.2009
Сообщений: 5,437
Завершенные тесты: 1
26.05.2010, 14:33 #15
Тогда будет наоборот ) m[i] будет ссылаться на *[10]
0
26.05.2010, 14:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2010, 14:33
Привет! Вот еще темы с ответами:

Динамические двумерные массивы через указатели. Как это происходит? - C++
Вот типичная идентификация двумерного массива (NxM): int** mass = new int*; for(i=0; i&lt;N; i++) mass = new int; Помогите...

Динамические (или не динамические.) переменные! - C++
УважаемыЕ! Есть вопрос. Вот код программы (ТЗ метод северо-западного угла) - под спойлером. А вот ее маленький кусок,задача которого в том,...

Дерево Пифагора - C++
Дерево Пифагора Пифагор, доказывая свою знаменитую теорему, построил фигуру, где на сторонах прямоугольного треугольника расположены...

Теорема Пифагора - C++
Здравствуйте, программа всякий раз выводит в ответе &quot;0&quot;. В чём ошибка? Благодарен! Язык C++, Visual C++ 2008 Express #include...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.