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

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

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

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

25.05.2010, 18:28. Просмотров 3144. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nkomynist
Сообщений: n/a
25.05.2010, 19:10     Таблица Пифагора через динамические масивы #2
C++
1
int **m = new int *[10];
ет указатель на указатель ...тойсь по сути здесь ты обявляеш массив указателей на int
C++
1
m[i] = new int [10];
а здесь ты выделяеш память для масива целых чисел, а в указатель записываеш адрес первого элемента
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 переменных каждый
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
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?
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
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]
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
25.05.2010, 23:01  [ТС]     Таблица Пифагора через динамические масивы #6
Почему 2 раза встречается слово new?
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.05.2010, 23:06     Таблица Пифагора через динамические масивы #7
Упрощенно говоря первый new задает количество строк в массиве, второй - количество элементов в строке.
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 минуты
А да ,всё верно вы сказали.
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
25.05.2010, 23:18     Таблица Пифагора через динамические масивы #9
mister2010, далее если интересно почему delete везде для массивной версии с оператором [] , потому что каждый m[i] 'указывает' на одномерный массив , так и сам m указывает опять же на массив указателей..
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; Сам указатель на масив указателей?
А скобки квадратные после делете зачем, они всегда должны быть пустыми?
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
26.05.2010, 11:28     Таблица Пифагора через динамические масивы #11
Правильно сказать освобождает память. А так все верно понял.
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
26.05.2010, 14:04  [ТС]     Таблица Пифагора через динамические масивы #12
Извиняюсь прошёл день немного подзабыл насчёт вот этого.
Вот это---> *[10] ссылается на это?----> m[i]
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
26.05.2010, 14:26     Таблица Пифагора через динамические масивы #13
Цитата Сообщение от mister2010 Посмотреть сообщение
Вот это---> *[10] ссылается на это?----> m[i]
Если ты имеешь в виду new int *[10], то он "создает" m[i]

Цитата Сообщение от mister2010 Посмотреть сообщение
А скобки квадратные после делете зачем, они всегда должны быть пустыми?
Квадратные скобки указывают delete, что освобождаемая память была выделена под массив.
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] правильно я понимаю?
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
26.05.2010, 14:33     Таблица Пифагора через динамические масивы #15
Тогда будет наоборот ) m[i] будет ссылаться на *[10]
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
26.05.2010, 14:37  [ТС]     Таблица Пифагора через динамические масивы #16
Почему наоборот?
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
26.05.2010, 14:40     Таблица Пифагора через динамические масивы #17
new int *[10] выделяет память под указатели, а с помощью m[i] можно обращаться к этим указателям.
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
26.05.2010, 14:54  [ТС]     Таблица Пифагора через динамические масивы #18
То есть когда я написал m[i] , тогда это *[10] стало указывать уже на этот масив m[i]
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
26.05.2010, 15:14     Таблица Пифагора через динамические масивы #19
m = new int *[10] - выделить память
m = new int *[10] - для указателей на инт
m = new int *[10] - в количестве 10 штук
m = new int *[10] - записать адрес первого указателя в переменную m. Далее с выделенной памятью ты работаешь с помощью переменной m. *[10] говорит о том, что выделяется память для 10 указателей и только, это ни на что более указывать не может.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2010, 21:44     Таблица Пифагора через динамические масивы
Еще ссылки по теме:

Динамические одномерные масивы C++
C++ Теорема Пифагора
C++ Теорема Пифагора
Динамические (или не динамические.) переменные! C++
C++ Вывести таблицу Пифагора

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

Или воспользуйтесь поиском по форуму:
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
26.05.2010, 21:44  [ТС]     Таблица Пифагора через динамические масивы #20
int **m = new int *[10]; Так как здесь я выделил память для масива сосотоящего из 10 указателей, из-за того что я выделил память для них именно из-за этого я могу получать доступ к этим указателям и что-то им присваивать, например m[4] = 5738 ?
Yandex
Объявления
26.05.2010, 21:44     Таблица Пифагора через динамические масивы
Ответ Создать тему
Опции темы

Текущее время: 22:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru