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

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

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

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

26.08.2009, 21:56. Просмотров 2734. Ответов 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. Указатель...

44
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
27.08.2009, 10:55 #31
Цитата Сообщение от Rififi Посмотреть сообщение
C++
1
Нет. Потом что типы не равны.
как не равны. а вот novi4ok утверждает что равны. я вот даже процитирую:
это будет указатель на указатель на тип int (int**)
так какой же будет тип у A?
.
nu pojmali, pojmali.
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
27.08.2009, 11:59 #32
Цитата Сообщение от Rififi Посмотреть сообщение
ты генерируешь пёрлы с такой скоростью, я проржаться не успеваю ((((((((:
Ну уж помедленней твоего бреда, который не упорядочен и призван чтоб запутать начинающих.

Цитата Сообщение от Rififi Посмотреть сообщение
ну так я это и пытаюсь выяснить. куда именно оно указывает
C++
1
2
3
4
5
6
    int A1[2] = {1 , 2};
    int A2[2][2] = {{1, 2}, {3, 4}};
    int A3[2][2][2] = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}};
    cout << "A1 = " << *A1 << endl;
    cout << "A2 = " << **A2 << endl;
    cout << "A3 = " << ***A3 << endl;
На первый элемент. Или ты веришь в чудеса? Тебе сейчас никто не доказывает что имя массива == указателю на тип. Тебе лишь говорят, что имя массива указывает(а не указатель) на его первый элемент.


Цитата Сообщение от Rififi Посмотреть сообщение
указатель на структуру (&p) равен указателю на её первый элемент (&p.i);
не указатель на структуру, а адресс структуры будет совпадать с адресов первого его поля. но тема не об этом.
0
Mozart
39 / 17 / 1
Регистрация: 21.08.2009
Сообщений: 63
27.08.2009, 12:37 #33
Так можно спорить до потери пульса. Любая переменная указывает адрес памяти где лежит само значение переменной.
Например:
C++
1
2
3
int a;//а указывает на какойто адрес по которому находится первый байт переменной int
int *A;//А указывает на какойто адрес по которому находится первый байт адреса
// по которому находится первый байт переменной типа int
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
27.08.2009, 12:45 #34
Цитата Сообщение от Mozart Посмотреть сообщение
Так можно спорить до потери пульса. Любая переменная указывает адрес памяти где лежит само значение переменной.
нет. указывать может указатель (адрес). а переменная лежит себе в памяти и занимает себе место. она сама и есть память.
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
27.08.2009, 12:47 #35
Цитата Сообщение от Mozart Посмотреть сообщение
int a;//а указывает на какойто адрес по которому находится первый байт переменной int
нет.. &a - это адресс перменной a. А a это непосредственно сама переменная. Чтобы с ней работать, ее не надо разименовывать.
0
Mozart
39 / 17 / 1
Регистрация: 21.08.2009
Сообщений: 63
27.08.2009, 12:53 #36
Ладно давайте так:
C++
1
2
3
4
5
{
int a;
}
int b;
int a;
Я так понимаю сначала выделяется память под переменную а, потом эта память освобождается, потом выделяется для b, и после выденяется новый кусок снова под а. или я не прав?
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
27.08.2009, 12:57 #37
Mozart, у тебя создается перменная в блоке. Она локальная. После выхода из блока - она уничтожается. Потом создается перменная b, а затем и a. Говорить о выделении немного некорректно. Так как создание любой переменной связано с выделением под нее памяти (даже под переменную-указатель). Обычно о выделении памяти под переменную говорят при использовании new/malloc (так как это выделение задается програмно, а не выполняется компилятором).
0
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
27.08.2009, 12:57 #38
Цитата Сообщение от Mozart Посмотреть сообщение
Любая переменная указывает адрес памяти где лежит само значение переменной.
Не "указывает", а является адресом переменной.
int a=5;
Число 5 записано по адресу a. Т.е. через букву a, или с помощью буквы a, происходит указание/именование/адресация некоторой области, в которую мы записали что-то.

В общем - есть то-о-онкий нюанс

Есть сущность (материальность), а есть имя, которым мы обозначаем эту сущность.
Указатель, это тоже сущность, но его материальность означает адрес/имя другой сущности.
0
Mozart
39 / 17 / 1
Регистрация: 21.08.2009
Сообщений: 63
27.08.2009, 13:04 #39
Monte-Cristo, Если мы этого не видим или не делаем, не значит что это не происходит =)
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
27.08.2009, 13:06 #40
Цитата Сообщение от Mozart Посмотреть сообщение
Monte-Cristo, Если мы этого не видим или не делаем, не значит что это не происходит =)
а я тебе и не сказал что это не происходит.
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
27.08.2009, 13:39 #41
ребята, а вот скажите: зачем все это? это окно? это дерево?...
0
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
27.08.2009, 15:31  [ТС] #42
Сейчас продолжил дальше изучение этой темы про указатели на динамический масив. И в книге, очень часто встречается фраза: Разыменование указателя, разыменование ссылки,как такого примера там не приводится,просто бросается фраза - "Разыменование" . У меня уже в голове она стоит, но я её не пойму. Что такое разыменование? Дайте,если кому не сложно примерчик, маленький с разыменованием указателя и ссылки.
0
snake32
1466 / 1032 / 142
Регистрация: 26.02.2009
Сообщений: 3,884
Записей в блоге: 5
27.08.2009, 16:13 #43
Golovastik, Разыменование указателя - это получение доступа к данным, на которые ссылается указатель, те ты записываешь\считываешь НЕ сам адрес, который содержится в перенной, а то что хранится по этому адресу. Символ * - как раз и делает разыменование.
C++
1
2
*pprime = 2; \\запись
long trial = *pprime;\\чтение
0
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
27.08.2009, 16:17 #44
К укзателю/ссылке можно применить операцию *
Эта операция и называется "разыменовыванием" (блин даже пальцы на клавиатуре загинаются от такого слова)

int *a;
a - указатель на целое
*a - собственно то самое целое, т.е. "разыменованный" указатель.

В общем, дурацкий термин, но другого я сам не знаю.
0
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
27.08.2009, 16:41 #45
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// ptr.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
 
int _tmain(int argc, _TCHAR* argv[])
{                             
    int x=5;                  
    int *a; // а это указатель на тип int
    a=&x;   // a хранит адрес икса можешь нарисовать схему как : а ------> адрес x 
            // чтобы узнать что находится в иксе нада разименовать этот указатель
    int z = *a;
    // и вывести значение которое сохранили в переменной z
    std::cout<<z;
    return 0;
}
Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "stdafx.h"
#include <iostream>
 
void swap(int &x , int &y)
{
    int t=x;
    x=y;
    y=t;
}
int _tmain(int argc, _TCHAR* argv[])
{                             
  int a=10;
  int b=20;
  swap(a,b);
  std::cout<<a<<' '<<b;
  return 0;
}
по сути ссылка является синонимом переменной , видишь функция вроде бы ничего не возвращает так как имеет тип void но в то же время наши значения a и b меняются , это благодаря тому что x,y являются по сути теме же a и b поэтому то что происходит с ними в функции отражается на наших a и b отсюда и ответ который меняет значения a и b.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2009, 16:41
Привет! Вот еще темы с ответами:

Динамическое выделение памяти - 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++
Доброго времени. У меня в программе есть два двумерных динамических массива. Код компилируется, но возникает ошибка времени выполнения:...


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

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

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