С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666

Что значит "изменить" в C++?

23.04.2018, 18:37. Показов 4075. Ответов 76
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В одной из тем было написано
Цитата Сообщение от Croessmah Посмотреть сообщение
Objects of array types cannot be modified
Чтобы не оффтопить там (т.к. там вопрос про устройство массивов) и не мучать тему 2014-го года, создам новую.
Как понимать сие утверждение?
Возьмём код
C++
1
2
int a[2] = { 0, 2, };
a[1] = 1;
По-моему, массив a после a[1] = 1 изменился.
Получается, "Objects of array types cannot be modified" — неправда? Или всё же массив a не изменился?
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.04.2018, 18:37
Ответы с готовыми решениями:

Sleep(8000) - что значит? На что можно заменить в борланд с++?
Не распознаёт Sleep(8000) . Если за комментировать пишет что f заданно но не используется. Как исправить? ...

Что значит Handle hf? Что в эту функцию нужно передавать
мне нужно создать функцию Node * ReadNode(HANDLE hf); (Node это структура) Так вот вопрос в том что значит Handle hf? Что в эту функцию...

Неправильный тип параметров подпрограммы-- что это значит и как изменить?
Выдает ошибку:" Неправильный тип параметров подпрограммы" - как это исправить? Разработать модуль, в котором размещены подпрограммы,...

76
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
23.04.2018, 19:52
C++
1
a = b; //error
1
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
23.04.2018, 20:04  [ТС]
Croessmah, то есть, массив не изменяется потому что ему нельзя присвоить?
Получается, в C++ только объекты скалярных типов могут меняться?
0
 Аватар для mvngr
225 / 189 / 98
Регистрация: 15.04.2018
Сообщений: 718
23.04.2018, 20:16
Что за ужас тут твориться? Как говорил шеф из братьев колобков "Ничего не понимаю"
Код
C++
1
2
3
4
    int a[2] = { 0, 2, };
    a[1] = 1;
 
    cout << a[0] << a[1] << endl;
Выдаст значения 0 и 1. Ошибок никаких не выдает. При выводе a[2] у вас так же не вылезет никаких ошибок, однако он считает участок памяти, который не был выделен под массив и в нем лежит мусор, т.к. мы завели массив только на два элемента, а читаем третий
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
23.04.2018, 20:19  [ТС]
Цитата Сообщение от mvngr Посмотреть сообщение
Что за ужас тут твориться? Как говорил шеф из братьев колобков "Ничего не понимаю"
Сказано, что "объекты типа массива не могут быть изменены". Что кажется мне не соответствующим действительности. И мне интересно, как это утверждение нужно правильно понимать.
0
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
23.04.2018, 20:21
Цитата Сообщение от mvngr Посмотреть сообщение
"Ничего не понимаю"
Если не понимаете, зачем писать?)
Человек задал вопрос - что значит "Objects of array types cannot be modified" и привел пример того, что он считает является "изменением массива" - пример изменения элемента этого массива. Выше ему привели пример того, что присвоение объекту A типа Массив объекта B типа массива приведет к ошибке, что поясняет высказывание, в котором ТС хочет разобраться.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
23.04.2018, 20:23
Массив является по сути указателем на адрес памяти. Этот указатель нельзя менять. Данные массива меняйте сколько угодно.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
23.04.2018, 20:26  [ТС]
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Массив является по сути указателем на адрес памяти.
Это распространённое заблуждение, которое я даже не хочу здесь обсуждать. Наверняка его уже много раз обсуждали в других темах.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
23.04.2018, 20:47
rat0r, a[1] не имеет тип массива.


P.S. Я закончил.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
23.04.2018, 20:50  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
a[1] не имеет тип массива
Я в курсе. И какой из этого вывод?
0
 Аватар для COKPOWEHEU
4082 / 2680 / 432
Регистрация: 09.09.2017
Сообщений: 11,900
23.04.2018, 20:58
int a[2];
a - объект массива
a[1] - объект элемента массива
Так вот, элемент массива менять можно, сам массив - нет. Нельзя присвоить один массив другому.
a = b; // неверно
a[1] = b[1]; //верно
memcpy(a, b, sizeof(b)); //верно
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
23.04.2018, 21:00
Цитата Сообщение от rat0r Посмотреть сообщение
Это распространённое заблуждение, которое я даже не хочу здесь обсуждать.
Ну ок, еще может размер его где то сохранен, но сути моего ответа это не меняет.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
23.04.2018, 21:01
Цитата Сообщение от rat0r Посмотреть сообщение
Как понимать сие утверждение?
Это утверждение можно понять при желании. Хотя при отсутствии желания это не обязательно. Массив это встроенный шаблонный тип. Инстанс массива задаётся типом элемента и количеством элементов. В этом смысле, его неизменноcть, это такое же открытие, как и неизменность любого инициализированного объекта. Например, переменная:
C++
1
int a(0);
абсолютно неизменна именно в том смысле, в котором неизменен массив:
C++
1
int b[1];
то есть, нельзя изменить не адрес ни размер созданного объекта. К константности как таковой, это не имеет никакого отношения. То есть к здравому смыслу оно относится весьма опосредованно. При желании понять можно, конечно.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
23.04.2018, 21:04  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Так вот, элемент массива менять можно, сам массив - нет.
Тогда как понять это:
Цитата Сообщение от http://eel.is/c++draft/lex.string#16.note-1
[ Note: The effect of attempting to modify a string literal is undefined.— end note]
string literal имеют тип массивов. Массивы менять нельзя (==невозможно). Но попытка изменить массив, который string literal, это undefined, надо понимать, behavior.

Что-то не сходится.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
23.04.2018, 21:07
Цитата Сообщение от rat0r Посмотреть сообщение
Я в курсе. И какой из этого вывод?
Что не следует путать массив и содержимое массива. То есть речь о том, что строки 3 и 4

C++
1
2
3
4
int a[2] = {0,2};
int b[2];
b = a; 
a = {0,2,3};
работать не будут
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
23.04.2018, 21:08  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
В этом смысле, его неизменноcть, это такое же открытие, как и неизменность любого инициализированного объекта.
То есть, не только массивы неизменны, но и любые другие объекты, даже скалярного типа, неизменны?
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
23.04.2018, 21:09
Константа на то и константа, что ее нельзя менять. Компилятор с ними работает иначе, чем с объектами, которые можно изменять. Константа хранится в одном экземпляре в памяти и используется разными частями программы. Например цифра 1. Измените эту константу и все части программы, где была задействована единица будут неопределенно себя вести. Отсюда и UB.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
23.04.2018, 21:09
Цитата Сообщение от TRam_ Посмотреть сообщение
работать не будет
Есть масса типов у которых нет перегруженной операции присваивания. Это не говорит о константности.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
23.04.2018, 21:09  [ТС]
Цитата Сообщение от TRam_ Посмотреть сообщение
Что не следует путать массив и содержимое массива.
Это только к массивам относится или к структурам тоже?
C++
1
2
struct { int i; } s { 0 };
s.i = 1;
Объект s здесь не изменился?
0
-30 / 27 / 1
Регистрация: 14.03.2015
Сообщений: 807
23.04.2018, 21:12
Может вся проблема в этом предложении, вырванном из контекста?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.04.2018, 21:12
Помогаю со студенческими работами здесь

Что значит public string T и все что дальше в приведенном коде?
class String { private string A; public String() { } public string T { ...

6 cores are activated что это значит и что с этим делать?
Доброго времени суток уважаемые форумчане. Возникла вот такая незадача с компом. Пишет 6 cores are activated при загрузке (в том же меню...

Написать что значит каждая строчка и за что она отвечает
Program ABC const n = 5; var a: array of integer; i, S, p: integer; begin s := 0; p := 1; for i := 1 to n do

Что значит исследовать сходимость метода (Якоби) и что за график нужно построить
Здравствуйте, вопрос в следуещем. В лабе по ЧМ нужно решить СЛАУ методом Якоби(что я сделал) и исследовать сходимость метода, построить...

Что значит это условие? Немогу расчехлить на что тут идёт проверка!!!
НЕмогу понять на что идет проверка. if monthof(DateTimePicker1.date+33)&lt;9 then radiobutton3.Checked:=true else ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru