Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 18.01.2016
Сообщений: 195

Не могу понять некоторый код

30.03.2018, 10:36. Показов 442. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На сколько я понимаю изначально создаем массив на пять элементов.
Далее, заполняем этот массив случайными цифрами.
Далее создаем массив указателей, состоящий из пяти строк
Затем в цикле (каждую итерацию) создаем массив строки, в которую загоняем введенную пользователем информацию.
А последние две строчки (29, 30) мне непонятны

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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <time.h>
using namespace std;
 
void pokaj(char **names, int mas[])
{
    for (int i = 0; i < 5; i++)
    {
        cout << names[i] << " "<<mas[i] << endl;
    }
    cout << endl;
}
void main()
{
    srand(time(0)); rand();
    system("chcp 1251");
    system("cls");
    int mas[5];
    for (int i = 0; i < 5; i++)
        mas[i] = rand() % 30+5;
 
    char **names = new char*[5];
    for (int i = 0; i < 5; i++)
    {
        char *name = new char[100];
        cin >> name;
        names[i] = new char[strlen(name) + 1];
        strcpy(names[i],  name);
        delete[] name;
    }
    system("pause");
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.03.2018, 10:36
Ответы с готовыми решениями:

Не могу понять код
Напишите, пожалуйста, что означает каждая строчка кода #include &lt;stdio.h&gt; #include &lt;string.h&gt; char s,t,c1,c2; bool...

Не могу понять код
struct Pholy { Pholy* Next; // Что делает этот код? Pholy* Prev; // Что делает этот код? int Pow; // Этот код создает...

Не могу понять код
Здравствуйте. Читаю Прата «Язык программирования C++» и встретился мне код, который я никак не могу понять, точнее не могу понять вывод: ...

6
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
30.03.2018, 10:39
Igorby,в 29 у тебя копируется новое и старое имя, в 30 ты очищаешь память под старое имя, чтобы не было повтора, как я понимаю
0
1 / 1 / 0
Регистрация: 18.01.2016
Сообщений: 195
30.03.2018, 11:34  [ТС]
Цитата Сообщение от ElKros Посмотреть сообщение
Igorby,в 29 у тебя копируется новое и старое имя, в 30 ты очищаешь память под старое имя, чтобы не было повтора, как я понимаю
Про delete я понимаю. Я имел ввиду строки 28, 29. И то что в 29 строке идет копирование тоже ясно. Только вот зачем? Я не понимаю логики скрипта. И самое наверное непонятное происходит в строчке под номером №28. Понимаю, что идет запись значения массива (строки) в элемент массива строк. Но зачем в значении передавать количество символов переданных пользователем и прибавлять к ним единицу?
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
30.03.2018, 11:49
Igorby, наверно, автор "память экономит", сначала выделяет память под 100 символов для строки, потом столько сколько нужно, копирует и удаляет 100-символьный массив.
Ерунда, конечно, полная, для name так точно в цикле память выделять незачем.
0
1 / 1 / 0
Регистрация: 18.01.2016
Сообщений: 195
30.03.2018, 15:19  [ТС]
Цитата Сообщение от woldemas Посмотреть сообщение
наверно, автор "память экономит", сначала выделяет память под 100 символов для строки, потом столько сколько нужно
То есть strlen(name) + 1, означает количество символов в строке + нуль терминатор... И как я понимаю в names[i] мы передаем значение, только что созданного массива символов, но не сам массив name. То есть если автор создает новый массив символов (с подходящим их количеством), он должен присвоить ему имя ? Или это не обязательно, так как впоследствии можно будет обратиться к строке через двойной цикл?

Цитата Сообщение от woldemas Посмотреть сообщение
Ерунда, конечно, полная, для name так точно в цикле память выделять незачем
Ну это видимо для примера.
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
30.03.2018, 15:59
Цитата Сообщение от Igorby Посмотреть сообщение
То есть если автор создает новый массив символов (с подходящим их количеством), он должен присвоить ему имя ? Или это не обязательно, так как впоследствии можно будет обратиться к строке через двойной цикл?
Оператор new выделяет память для массива размером strlen(name) + 1 * размер char, это происходит в строчке new char[strlen(name) + 1] и возвращает указатель на эту память в names[i], т.е. в names[i] записывается указатель на выделенную память с помощью оператора new
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
30.03.2018, 16:06
Цитата Сообщение от Igorby Посмотреть сообщение
И как я понимаю в names[i] мы передаем значение, только что созданного массива символов, но не сам массив name.
Адрес выделенной памяти, там же блок под указатели выделен.
Цитата Сообщение от Igorby Посмотреть сообщение
Или это не обязательно, так как впоследствии можно будет обратиться к строке через двойной цикл?
Через индекс можно обратиться к Си-строке, адрес которой сохранен в блоке указателей (адрес которого сохранён в names). Через двойной индекс можно обратиться к символам такой Си-строки.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.03.2018, 16:06
Помогаю со студенческими работами здесь

Не могу понять почему код не работает
Здравствуйте! Было дано задание: Напишите функцию, которая - называется IsPalindrom - возвращает bool - принимает параметр...

Не могу понять код пузырьковой сортировки
Сам алгоритм работы ясен, а как это воплотить в код не могу понять. Если читать готовые коды, тоже не могу разобраться.

не могу понять почему не работает мой код
#include&lt;iostream&gt; #include&quot;cstring&quot; using namespace std; struct Spisok { char nameProduct; char count; char price; ...

Не могу понять что значит этот код
Здравствуйте.Не могу понять что значит эта функция в программе: void incrementMinutes(Time &amp; const int); Если нужен...

Не могу понять как работает этот код в деталях
dg1-&gt;Rows-&gt;Clear();//Очищяет в датагриде строки ifstream infile (StrToChar(openFileDialog1-&gt;FileName));//Чтение из файла ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru