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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.73
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
#1

Динамическое выделение - C++

26.08.2009, 21:56. Просмотров 2720. Ответов 44

Если кто может,дайте расшифровку этому:
C++
1
2
3
4
pprime = new long[max];
    *pprime = 2;
    *(pprime + 1) = 3;
    *(pprime + 2) = 5;
этому:
C++
1
    found = (trial%*(pprime + i)) == 0;
этому:
C++
1
2
    if(found == 0)
        *(pprime + count++) = trial;
и этому:
C++
1
delete [] pprime;
из этого кода:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
    setlocale(0,"Russian");
    long* pprime = 0;
    long trial = 5;
    int count = 3;
    int found = 0;
    int max = 0;
 
    cout<<endl
        <<"Введите количество простых чисел которые хотите получить (минимум 4):";
    cin>>max;
    if(max<4)
        max = 4;
 
    pprime = new long[max];
    *pprime = 2;
    *(pprime + 1) = 3;
    *(pprime + 2) = 5;
do
{
    trial+=2;
    found = 0;
    for(int i = 0; i < count; i++)
    {
        found = (trial%*(pprime + i)) == 0;
        if(found)
            break;
    }
    if(found == 0)
        *(pprime + count++) = trial;
}while(count<max);
 
for(int i = 0; i < max; i++)
{
    if(i%5 ==0)
        cout<<endl;
        cout<<setw(10) << *(pprime + i);
}
delete [] pprime;
pprime = 0;
cout<<endl;
 
cin.ignore();
cin.get();
}
Просто по книге не описуются детали этих строк, сижу минут 30, не могу въехать,что они делают. Желательно было бы объяснить весь код.
Благодарю за терпение.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2009, 21:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамическое выделение (C++):

динамическое выделение - C++
совсем запуталась в динамическом выделение памяти.. подскажите,верно ли решено?? #include &lt;iostream&gt; #include &lt;stdio.h&gt; ...

Динамическое выделение памяти - C++
Здравствуйте! Помогите пожалуйста, мне задали сделать чтобы в выделенном (выделить не удалось, оставил теги B, там где идёт &quot;объявляем и...

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

Динамическое выделение памяти - C++
Не могу разобраться с динамическим выделением памяти. Объект - учреждение. Имеет параметры - название, тип, год основания, количество...

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

Динамическое выделение памяти - C++
Доброго времени суток. Пытаюсь разобраться с динамическим выделением память. Суть: Есть структура с двумя полями: 1. Указатель...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
26.08.2009, 22:01 #2
прочтите в той же книге что такое указатели (pointers) и управление памятью. если в ней этого нет - возьмите другую книгу, где этого есть.
0
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
26.08.2009, 22:02 #3
Цитата Сообщение от Golovastik Посмотреть сообщение
Код
pprime = new long[max];
	*pprime = 2;
	*(pprime + 1) = 3;
	*(pprime + 2) = 5;
- выделение памяти под массив на max элементов типа long
- в первую ячейку массива пишем 2
- pprime+n вычисление указателя на n-ый элемент массива

дальше терпелка кончилася
1
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
26.08.2009, 22:14  [ТС] #4
Пожалуйста,кто может, дайте расшифровку немного дальше.
0
M128K145
Эксперт С++
8288 / 3508 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
26.08.2009, 22:22 #5
C++
1
2
3
4
5
pprime = new long[max]; // динамическое выделение памяти под max элементов
    *pprime = 2; // первому элементу присваивается значение 2 (*pprime - указатель)
    *(pprime + 1) = 3; // второму эл. - 3(запись *(pprime + 1) означает смещение относительно
           // начала на + 1 элемент)
    *(pprime + 2) = 5; // аналогично 3 строке
C++
1
2
found = (trial%*(pprime + i)) == 0;// присвоение переменной found значения 1(истина), если
// остаток от деления trial на *(pprime + i) равен 0, иначе 0(ложь)
C++
1
2
3
if(found == 0) // если found равен 0, то 
    *(pprime + count++) = trial; // присвоение по адресу*(pprime + count) значение trial и
           // после этого увеличение счетчика на 1
C++
1
delete [] pprime; // освобождение динамически выделеной памяти
1
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
26.08.2009, 22:43  [ТС] #6
Спасибо. Меня ещё интересует вот эта строка:
C++
1
    pprime = new long[max];
Это вроде и не масив, потому что масив имеет имя и и тип и индекс, а тут тип и индекс? Чо-то не врубаю.
Дайте пожалуйста полное расшифрование этой строки.
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
26.08.2009, 22:47 #7
Golovastik, это динамическое выделение памяти под массив. Выделяется память под массив типа long размером max и возвращается указатель на эту область (а именно на первый его элемент).
0
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
26.08.2009, 22:57  [ТС] #8
А название масива определяется тогда вот этой строкой:
Код
long* pprime = 0;
Если масив,тогда он должен иметь имя. Оно определяется указателем на лонг. И получается что имя масива pprime состоящий из элементов [max]
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
26.08.2009, 23:03 #9
Цитата Сообщение от Golovastik Посмотреть сообщение
Если масив,тогда он должен иметь имя. Оно определяется указателем на лонг. И получается что имя масива pprime состоящий из элементов [max]
Фактически да. Вообще, статический массив - это указатель на первый элемент массива.
0
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
26.08.2009, 23:33  [ТС] #10
Имя масива(динамического) - это указатель на первый элемент масива?
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
26.08.2009, 23:35 #11
Да.
0
Rififi
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
26.08.2009, 23:39 #12
Цитата Сообщение от Golovastik Посмотреть сообщение
Имя масива(динамического) - это указатель на первый элемент масива?
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
Да.
А теперь - правильный ответ (:
Имя массива - это НЕ указатель на его первый элемент.
Книги, в которых утверждается иное, можно использовать для полее полезных действий
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
27.08.2009, 00:09 #13
Rififi, а что же это тогда?
0
Rififi
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
27.08.2009, 00:19 #14
Monte-Cristo,
Rififi, а что же это тогда?
самостоятельня сущность языков C/C++, имеющая две определяющих характеристики: тип и размер.
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
27.08.2009, 00:24 #15
Цитата Сообщение от Rififi Посмотреть сообщение
самостоятельня сущность языков C/C++, имеющая две определяющих характеристики: тип и размер.
ну я стобой согласен.. отчасти.. но ты думаешь Golovastik понял? Я то отвечал чтоб он понял, а не чтоб ты оценивал корректность ответа с точки зрения архитектуры.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2009, 00:24
Привет! Вот еще темы с ответами:

Динамическое выделение памяти - C++
Имеется: #define Index 1000 typedef int BaseType; typedef BaseType TMemList; typedef unsigned ptrel; typedef struct List...

Динамическое выделение памяти - C++
Всем привет, читал про динам. выделение памяти и тут возник вопрос. Так как для новичков пишут книги не очень глубоко, то в книге ответа на...

Динамическое выделение памяти - C++
Вот у меня есть 2 примера: char* str = &quot;Немыслимый текст&quot;; char* s = new char ; Тут указатель s будет указывать на блок в...

Динамическое выделение памяти new - C++
Доброго времени. У меня в программе есть два двумерных динамических массива. Код компилируется, но возникает ошибка времени выполнения:...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.08.2009, 00:24
Ответ Создать тему
Опции темы

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