Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
 Аватар для Golovastik
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435

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

26.08.2009, 21:56. Показов 4652. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.08.2009, 21:56
Ответы с готовыми решениями:

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

Динамическое выделение памяти
Имеется такая вот задача ! Нужно сделать что бы память выделялась динамически,а не на этапе компиляции!!! Какие будут предложения ??? ...

Динамическое выделение памяти
Всем здравствуйте) помогите пожалуйста))) Контрольные вопросы 1. Раскройте понятие указателя в языке С. 2. Опишите синтаксис...

44
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
27.08.2009, 01:00
Студворк — интернет-сервис помощи студентам
обычной адрессной арифметики.
по этому поводу есть другой, не менее чУдный вопрос:
имеем:
int arr[10][10];

валидна ли следующая строчка и что она означает:
C++
1
&arr;
для асиливших - переход на следующий уровень
тот же вопрос для:
C++
1
&arr + 1;
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
27.08.2009, 01:07
Цитата Сообщение от Rififi Посмотреть сообщение
[B]если в массиве int arr[10] имя arr - это указатель на первый элемент (и соответственно имеющий тип int*) то скажи, в таком массиве:
int arr[10][10] - сколько будет указателей, будут ли они вообще, и если будут, то куда они будут указывать и какой иметь тип?
это будет указатель на указатель на тип int (int**), будет указывать на первый элемент массива указателей на int
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
27.08.2009, 01:15
это будет указатель на указатель на тип int (int**), будет указывать на первый элемент массива указателей на int
Замечательно.
таким образом мы приходим к тому, что вот этот код отработает нормально, так?
C++
1
2
3
4
5
6
7
8
9
void f(int** arr)
{
    for (int i=0; i<10; i++)
    for (int j=0; j<10; j++)
        arr[i][j] = 0;
}
 
int arr[10][10];
f(arr);
Добавлено через 2 минуты
PS. и ещё вот вопрос: а элементы a[0] .. a[9] - это тоже указатели, или что?
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
27.08.2009, 01:23
Цитата Сообщение от Rififi Посмотреть сообщение
таким образом мы приходим к тому, что вот этот код отработает нормально, так?
Нет. Потом что типы не равны. int A[][] ближе(но не равен) к указателю int* так как элементы в статическом массиве распологаются друг за дружкой.

Добавлено через 3 минуты
То есть вот этот код будет вполне корректен:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void func(int* Z)
{
    for (int i=0; i<4; i++)
        cout << Z[i] << " ";
}
 
int main()
{
    int A[2][2] = {{1, 2}, {3, 4}};
    func((int*)A);
    cin.get();
    return 0;
}
0
 Аватар для Mozart
39 / 17 / 1
Регистрация: 21.08.2009
Сообщений: 63
27.08.2009, 01:33
А вот назрел такой вопрос, как для
C++
1
int **A;
корректно выделить память?
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
27.08.2009, 01:37
Например так (матрица mxn):

C++
1
2
3
int **A = new int*[m];
for (int i=0; i<m; i++)
    A[i] = new int[n];
Добавлено через 1 минуту
Rififi, факт остается фактом. Мы сейчас не говорим о размещении массивов в памяти. Мы говорим о том, что имя массива указывает на его первый элемент.
1
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
27.08.2009, 01:43
C++
1
Нет. Потом что типы не равны.
как не равны. а вот novi4ok утверждает что равны. я вот даже процитирую:
это будет указатель на указатель на тип int (int**)
так какой же будет тип у A?

int A[][] ближе(но не равен)
"ближе", "дальше"... ***се. Мы всё еще про C++, строгий и стандартизированный язык, обладающей Тьюринг-полнотой? R.O.F.L.

Добавлено через 5 минут
Мы сейчас не говорим о размещении массивов в памяти. Мы говорим о том, что имя массива указывает на его первый элемент.
Да погодь ты...
ты генерируешь пёрлы с такой скоростью, я проржаться не успеваю ((((((((:

про "неразговор о размещении массива в памяти" (а интересно где тогда, в вакууме?? (блин... такая кора... ващще Ж)))))))))) ) ) мы еще вершемся к этому я надеюсь.

Мы говорим о том, что имя массива указывает на его первый элемент
ну так я это и пытаюсь выяснить. куда именно оно указывает, и какой тип имеет.
0
 Аватар для Mozart
39 / 17 / 1
Регистрация: 21.08.2009
Сообщений: 63
27.08.2009, 01:47
ну что-то похожее у меня и получилось, только там кавычек лишних было.
Самое любопытное что в итоге:
C++
1
2
3
4
int a[10][10];
int** A;
a[1][3];//Обращение к ним работает одинаково Х_х
A[2][3];
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
27.08.2009, 01:55
Обращение к ним работает одинаково Х_х

кстати да.

вот мы например имеем функцию и класс.
C++
1
2
3
4
5
6
7
8
9
10
11
void f(int i);
 
struct S
{
    void operator()(int i);
};
 
S s;
 
f(10);
s(20);
таким образом получается, что классы и функции - это одно и тоже.

или вот ещё:
C++
1
2
3
4
5
6
struct P
{
   int i;
};
 
P p;
указатель на структуру (&p) равен указателю на её первый элемент (&p.i); значит это что? пральна, одно и тоже. Там где требуется P можно передавать int, и наоборот.
а-ха-ха. да я сегодня в ударе ((((((((((((((:
0
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 447
27.08.2009, 10:39
Rififi, спасибо за массив массивов.
В общем, наверное так
a = new []
a не является ссылкой на первый элемент массива, но совпадает с ней
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
27.08.2009, 10:55
Цитата Сообщение от Rififi Посмотреть сообщение
C++
1
Нет. Потом что типы не равны.
как не равны. а вот novi4ok утверждает что равны. я вот даже процитирую:
это будет указатель на указатель на тип int (int**)
так какой же будет тип у A?
.
nu pojmali, pojmali.
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
27.08.2009, 11:59
Цитата Сообщение от 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
Так можно спорить до потери пульса. Любая переменная указывает адрес памяти где лежит само значение переменной.
Например:
C++
1
2
3
int a;//а указывает на какойто адрес по которому находится первый байт переменной int
int *A;//А указывает на какойто адрес по которому находится первый байт адреса
// по которому находится первый байт переменной типа int
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
27.08.2009, 12:45
Цитата Сообщение от Mozart Посмотреть сообщение
Так можно спорить до потери пульса. Любая переменная указывает адрес памяти где лежит само значение переменной.
нет. указывать может указатель (адрес). а переменная лежит себе в памяти и занимает себе место. она сама и есть память.
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
27.08.2009, 12:47
Цитата Сообщение от Mozart Посмотреть сообщение
int a;//а указывает на какойто адрес по которому находится первый байт переменной int
нет.. &a - это адресс перменной a. А a это непосредственно сама переменная. Чтобы с ней работать, ее не надо разименовывать.
0
 Аватар для Mozart
39 / 17 / 1
Регистрация: 21.08.2009
Сообщений: 63
27.08.2009, 12:53
Ладно давайте так:
C++
1
2
3
4
5
{
int a;
}
int b;
int a;
Я так понимаю сначала выделяется память под переменную а, потом эта память освобождается, потом выделяется для b, и после выденяется новый кусок снова под а. или я не прав?
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
27.08.2009, 12:57
Mozart, у тебя создается перменная в блоке. Она локальная. После выхода из блока - она уничтожается. Потом создается перменная b, а затем и a. Говорить о выделении немного некорректно. Так как создание любой переменной связано с выделением под нее памяти (даже под переменную-указатель). Обычно о выделении памяти под переменную говорят при использовании new/malloc (так как это выделение задается програмно, а не выполняется компилятором).
0
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 447
27.08.2009, 12:57
Цитата Сообщение от Mozart Посмотреть сообщение
Любая переменная указывает адрес памяти где лежит само значение переменной.
Не "указывает", а является адресом переменной.
int a=5;
Число 5 записано по адресу a. Т.е. через букву a, или с помощью буквы a, происходит указание/именование/адресация некоторой области, в которую мы записали что-то.

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

Есть сущность (материальность), а есть имя, которым мы обозначаем эту сущность.
Указатель, это тоже сущность, но его материальность означает адрес/имя другой сущности.
0
 Аватар для Mozart
39 / 17 / 1
Регистрация: 21.08.2009
Сообщений: 63
27.08.2009, 13:04
Monte-Cristo, Если мы этого не видим или не делаем, не значит что это не происходит =)
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
27.08.2009, 13:06
Цитата Сообщение от Mozart Посмотреть сообщение
Monte-Cristo, Если мы этого не видим или не делаем, не значит что это не происходит =)
а я тебе и не сказал что это не происходит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.08.2009, 13:06

Динамическое выделение памяти
Добрый день. Возник вопрос: Как мне узнать адрес последнего байта в выделенной памяти? Я выделил память (массив нулей и единиц): ...

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

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

динамическое выделение имен
Есть такая проблема.. В базе имеются записи типа: Ф.И.О., пол, возраст, адрес, родственники(серии их паспортов например). Колво таких...

Динамическое выделение памяти.
Доброго времени суток. Помогите, пожалуйста, решить задачу. Задача тривиальна - поиск и замена подстроки. Суть в чем: необходимо...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru