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

Стенли Б. Липпман

19.07.2021, 15:51. Показов 1778. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кто поможет разобраться? Стр 212 -213


C++
1
2
3
4
5
6
// присваивает первый элемент массива arr последнему элементу
// в последнем ряду массива ia 
ia[2][3] = arr[0][0][0];
int (&row)[4] = ia[1]; // связывает ряд второго массива с четырьмя
// элементами массива ia
////////////////////////////////////////////////////////////////////
Мой компилятор это не пропускает. Ни в первом варианте, ни во втором. Поэтому сам я могу только догадываться, что кому здесь присваивается, и что, в результате, происходит. И как это оно связывает с четырьмя элементами массива ia, когда у него только два элемента?
Что здесь не так?

Вот мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/////////////////////////////////////////////////////////////////////
#include <iostream>
using namespace std;
const int sz = 5, sv =3;
 
int main()
{
    int vv[sz][sv] =
    {
        {0,1,2},
        {1,2,3},
        {2,3,4},
        {3,4,5},
        {4,5,6}
    };
    int (&arr)[5] = vv[0];
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.07.2021, 15:51
Ответы с готовыми решениями:

Стенли Б. Липпман
Цитата из учебника: vector&lt;string&gt; text; // пустой вектор while (cin &gt;&gt; word) { text.push_back(word); // добавить слово в текст } ...

Стенли Б. Липпман
typedef wages base, *p; // base - синоним для double, a p - для double* Вопрос: по знаку &quot;*&quot;. Его всё равно, где ставить?...

Стенли Б. Липпман, преобразования в логическихвыражениях
Из учебника: при использовании значения типа bool в арифметическом выражении оно всегда преобразуется в 0 или 1. Я написал: ...

16
6 / 6 / 0
Регистрация: 07.07.2021
Сообщений: 32
19.07.2021, 16:11
У вас какое издание? Поподробнее бы прочесть хотел у Липпмана. В 5-м на указанных страницах побитовые операции. Он, кстати(Липпман) не очень внятно в этом издании все объясняет, быстро пробегает, иногда когнитивный диссонанс откуда что взялось.
1
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
19.07.2021, 16:18  [ТС]
Стр 192 того же учебника (базовый курс, пятое издание):

Нельзя инициализировать массив как копию другого массива, не
допустимо также присвоение одного массива другому.
int a[] = {0, 1, 2}; // массив из трех целых чисел
int a2[] = a; // ошибка: нельзя
инициализировать один массив
// другим
а2 = a; // ошибка: нельзя присваивать
один массив другому

Добавлено через 1 минуту
Цитата Сообщение от _abstract_mem Посмотреть сообщение
У вас какое издание?
Вы откуда учебник скачали? У меня, видимо, пиратская копия!
0
6 / 6 / 0
Регистрация: 07.07.2021
Сообщений: 32
19.07.2021, 16:24
Что-то у меня другой репиринт видимо, 192 страница последовательность операторов.

С присвоением понятно вроде все, имя массива без кв.скобок во внутреннем представлении - это адрес первого элемента.
С дополнительной операцией взятия адреса от имени - вроде тот же результат, типо как уточнение. Еще там есть ньюанс, адрес начала и адрес всего массива, но имеет значение только при арифметике указателя, то есть +1 передвигает на 1 элемент или на весь массив.
Попробуйте прочесть по этой теме у Праты тогда, чтобы прояснить, там водянисто, но раскрывается подробно.
1
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
19.07.2021, 16:30  [ТС]
Цитата Сообщение от _abstract_mem Посмотреть сообщение
имя массива без кв.скобок во внутреннем представлении - это адрес первого элемента.
В моём варианте учебника это рассказано и показано. Но я привёл другой пример, в котором явно ошибка. Вы можете сбросить ссылку на свой вариант учебника?
0
6 / 6 / 0
Регистрация: 07.07.2021
Сообщений: 32
19.07.2021, 17:03
Цитата Сообщение от Walex Посмотреть сообщение
Но я привёл другой пример, в котором явно ошибка. Вы можете сбросить ссылку на свой вариант учебника?
Скачивал в pdf-версии, откуда - уже не найти сейчас, но в поисковике свободно выдается. Может быть у кого-то обложка переделана под более новое издание, а в нем 2001 года, так тоже иногда делают))

По поводу примера, попробовал у себя, оказывается работает
C++
1
int (&row)[4] = ia[1];
Но не работает, если отдельно объявить массив и отдельно присваивать. Может быть это связано с инициализацией, и реализацией в 11 стандарте.
Нужно комментариев специалистов подождать.

Добавлено через 11 минут
Кажись вот тут в чем дело, со скобками указывается ссылка на массив, без скобок массив ссылок был бы.
Ссылке присваивается далее то, куда она будет ссылаться, то есть на ia[1].
Ссылка эта должна инициализироваться при объявлении, потому раздельно и не получилось. Вроде все правильно. Проверьте какой стандарт выставлен в компиляторе
1
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
19.07.2021, 18:22  [ТС]
Цитата Сообщение от _abstract_mem Посмотреть сообщение
По поводу примера, попробовал у себя, оказывается работает
C++Выделить код
1
int (&row)[4] = ia[1];
Вы ia до этого инициализировали? И после этого работает? У меня - нет!
И чему верить? Ведь сказано, что массив нельзя инициировать массивом!
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
19.07.2021, 18:46
Цитата Сообщение от Walex Посмотреть сообщение
Мой компилятор это не пропускает. Ни в первом варианте, ни во втором. Поэтому сам я могу только догадываться, что кому здесь присваивается, и что, в результате, происходит. И как это оно связывает с четырьмя элементами массива ia, когда у него только два элемента?
Там по ходу дела вместе с объяснением в тексте код пишется. Вы должны весь его в пример к себе вставить, а не таким маленьким кусочком.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
19.07.2021, 18:50
А arr там еще выше объявлен.

Цитата Сообщение от Walex Посмотреть сообщение
Ведь сказано, что массив нельзя инициировать массивом!
Речь об этом?
Цитата Сообщение от Walex Посмотреть сообщение
ia[2][3] = arr[0][0][0];
Это не инициализация. Там же в тексте написано
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
19.07.2021, 18:55
Цитата Сообщение от _abstract_mem Посмотреть сообщение
Проверьте какой стандарт выставлен в компиляторе
Тут вообще дело не в этом.

Добавлено через 4 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
Вы должны весь его в пример к себе вставить, а не таким маленьким кусочком.
Walex, Т.е. полный пример должен вот так выглядеть.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    int arr[10][20][30] = {0};
 
    int ia[3][4] = {
        {0,1,2,3},
        {4,5,6,7},
        {8,9,10,11}
    };
 
    ia[2][3] = arr[0][0][0];
    int (&row)[4] = ia[1];
}
0
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
19.07.2021, 19:01  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
ia[2][3] = arr[0][0][0];
То есть, ia[2][3] - это отдельный элемент массива?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
19.07.2021, 19:04
Цитата Сообщение от Walex Посмотреть сообщение
То есть, ia[2][3] - это отдельный элемент массива?
Да. Это четвертый элемент в третьей строке. Или, другими словами, из строки с индексом 2 взяли элемент в индексом 3.
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
19.07.2021, 19:16
Цитата Сообщение от Walex Посмотреть сообщение
Ведь сказано, что массив нельзя инициировать массивом!
Где вы видите здесь инициализацию массива массивом? Приведите конкретный код.

Цитата Сообщение от _abstract_mem Посмотреть сообщение
Может быть это связано с инициализацией, и реализацией в 11 стандарте.
Никакого отношения ни к каким особенностям новых стандартов тема не имеет.
0
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
19.07.2021, 19:41  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Где вы видите здесь инициализацию массива массивом? Приведите конкретный код.
Это было до того как вы связали воедино код и стало ясно, что это конкретный элемент, а не массив.
Но, если вам не в тягость, продвиньте свой ликбез дальше:
Цитата Сообщение от DrOffset Посмотреть сообщение
ia[2][3] = arr[0][0][0];
Этот элемент ia инициирован первым элементом из внутреннего массива arr?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
19.07.2021, 19:45
Лучший ответ Сообщение было отмечено Walex как решение

Решение

Цитата Сообщение от Walex Посмотреть сообщение
Этот элемент ia инициирован первым элементом из внутреннего массива arr?
Да. Только элементу здесь присвоили значение, а не инициализировали.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
19.07.2021, 19:51
Цитата Сообщение от Walex Посмотреть сообщение
Это было до того как вы связали воедино код и стало ясно, что это конкретный элемент, а не массив.
Ну так это вы должны были сразу сделать. Бессмысленно задавать вопросы про ia и arr, если не ясно что такое ia и arr.

Цитата Сообщение от Walex Посмотреть сообщение
Этот элемент ia инициирован первым элементом из внутреннего массива arr?
Инициализация в С++ возможна только в объявлениях. Ваше

C++
1
ia[2][3] = arr[0][0][0];
- это не объявление. Значит и инициализации здесь нет. Это присваивание, а не инициализация.

А что именно тот присваивается зависит от того, что такое ia и что такое arr.
1
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
19.07.2021, 19:57  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Ну так это вы должны были сразу сделать.
Если бы это стояло рядом - безусловно. Но к Липпману нужно привыкнуть. У него часть кода в одной главе, а часть в другой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.07.2021, 19:57
Помогаю со студенческими работами здесь

Двоичный поиск с использованием итераторов, Стенли Б. Липпман
Не понял последнюю строчку. Кто поможет разобраться? Цитата из учебника: Используя итераторы, двоичный поиск можно реализовать...

Итераторы Стенли Б. Липпман Язык программирования C++ 5-е издание
Можете переписать данный код используя итераторы. Прост не понимаю где именно должны здесь быть итераторы задача взята из книги Стенли ...

Язык программирования С++. Вводный курс 4-е изд. Стенли Липпман[2007]
Стоит ли читать данную книгу новичку? Язык программирования С++. Вводный курс 4-е изд. Стенли Липпман

Язык программирования C++ Базовый курс Стенли Б. Липпман Жози Лажойе Барбара Э.Му"
Задача из учебника: упражнение 1.20. По адресу http://www.informit.com/title/032174113 в каталоге кода первой главы содержится...

Консультации.[Липпман/Лажойе]
Приветствую. Начал изучение языка C++ с книги Стенли Б.Липпмана и Жози Лажойе &quot;Язык программирование C++. Третье издание&quot;. Про...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru