Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
3 / 3 / 2
Регистрация: 11.04.2018
Сообщений: 38

Компилятор молча исправляет ошибку

28.05.2018, 13:20. Показов 730. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Недавно решал одну задачку, составил программу, проверил, отладил всё вроде работает правильно. Отправил решение - всё в порядке, принято. Потом стал искать места в программе, которые можно сократить и наткнулся на свою ошибку. Я перепутал имена переменных, причём одна переменная это двумерный массив интов, а другая - просто инт. То есть всё равно что вместо A[B][C] написал B[A][C]. Но программа то была успешно скомпилирована и правильно работает и не только у меня одного, но так же и в проверяющей системе. Значит, я так понимаю, подобные ошибки компилятор распознаёт и исправляет их молча сам. Раньше нигде об этом ничего не слышал и не читал. Интересно, какие ещё фишки есть у компилятора Си++? Подскажите, кто знает, где можно прочесть об этом.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
int a[8][8],b,c;
using namespace  std;
int main() {
    cout<<a[b][c]<<' '<<b<<' '<<c<<'\n';
    a[b][c]=3;
    cout<<a[b][c]<<' '<<b<<' '<<c<<'\n';
    b[a][c]=5;
    cout<<a[b][c]<<' '<<b<<' '<<c<<'\n';
    return 0;
}
Результат :
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.05.2018, 13:20
Ответы с готовыми решениями:

Компилятор в константном методе выдает ошибку
Можно ли как-то решить проблему? Кроме удаления const. template &lt;typename TAirport&gt; class AirportCounter { public: //....... ...

Компилятор g++ выдает ошибку: "Версия этого файла несовместима с используемой версией Windows"
Когда запускаю программу с указателями, то виндовс ее сразу закрывает. Почему и как исправить? Все на скришоте

Компилятор (Visual C++ 6.0) в плохой совместимости с Windows 7. Посоветуйте другой компилятор
Здравствуйте! Я недавно начал заниматься С++, но мой компилятор (Visual C++ 6.0) в плохой совместимости с Windows 7 Посоветуйте какой...

3
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
28.05.2018, 15:07
a[b] эквивалентно *(a+b)

b[a] эквивалентно *(b+a)

a+b, b+a сумма указателя на начало массива и целого. См. например, Керниган, Ритчи. Язык программирования C. (5.3. Указатели и массивы.)

Добавлено через 4 минуты
Пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
 
int main()
{
  int a[4] = {10, 20, 30, 40 };
 
  int* p = &a[0];
  p = 1 + p;
  std::cout << *p << std::endl;  // 20
  
  2[a] = 111;
  std::cout << a[0] << "   " ; // 10
  std::cout << a[1] << "   " ; // 20
  std::cout << a[2] << "   " ; // 111
  std::cout << a[3] << "   " ; // 40
}
1
3 / 3 / 2
Регистрация: 11.04.2018
Сообщений: 38
28.05.2018, 18:12  [ТС]
Я так понимаю, что в выражении A[B] грубо говоря к адресу массива A прибавляется значение переменной B и в результате получается адрес нужного элемента массива. Но что может получиться из выражения B[A] ? К значению переменной B прибавляется адрес массива A и получается тот же адрес элемента? Не знал, что это так работает.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
29.05.2018, 12:52
Цитата Сообщение от Фортунатов Посмотреть сообщение
К значению переменной B прибавляется адрес массива A и получается тот же адрес элемента?
Да. записи идентичны. Хотя, разумеется, так лучше не делать. Компилятор то поймёт, а люди, поддерживающие код - нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.05.2018, 12:52
Помогаю со студенческими работами здесь

компилятор выдает ошибку на loword(lparam)
Пытаюсь сделать рисование мышкой в билдере со связкой opengl, и нашла пример кода http://****************.ru/showthread.php?t=115509 . Так...

компилятор нашёл ошибку
Ввёл всё как в книге, но компилятор нашёл ошибку. Помогите пжалуйста. И ещё, в спец. теме, пытался понять - как же быть с русскими...

компилятор выводит ошибку
Тут пользователь вводит любое 6-ти значное число и нужно и нужно определить счастливое оно или нет. Оно счастливое если сумма первых 3...

Компилятор выдает ошибку
Работаю в Code::Blocs. Компилятор выдает ошибку: &quot;LAB 2 - Debug&quot; uses an invalid compiler. Probably the toolchain path within the...

Компилятор выдаёт ошибку
Я новичок в C++ и не могу понять в чём ошибка написал вот такой код: #include &lt;iostream&gt; #include &lt;string.h&gt; using...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru