Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 24.02.2024
Сообщений: 16

Проблема с арифметикой указателей

27.02.2024, 17:41. Показов 1300. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include <iostream>
 
using namespace std;
 
bool checkNumbers(int a, int b, int c) //Функция для проверки на возможность трех чисел быть сторонами треугольника
{
    return a + b > c && a + c > b && b + c > a;
}
 
int triangle(int firstElement, ...) //Основная функция
{
    int* address = &firstElement; //Получаем адресс первого элемента
    int Arr[3]; //Инициализируем массив
    int counter = 0; //Инициализируем счетчик массива
    int successCounter = 0; //Инициализируем счетчик успешных троек
 
    while (*address != -1) //Пока не дошли до минус единицы
    {
        if (*address == 0) //Если значение по аддрессу = 0, то
        {
            if (counter == 3 && checkNumbers(Arr[0], Arr[1], Arr[2])) //Если до 0 было 3 элемента и при этом они могут быть сторонами треугольника,
                successCounter++; //то увеличиваем счетчика успешных троек на 1
            
            counter = 0; //Сбрасываем счетчик
        }
        else //Иначе
        {
            Arr[counter] = *address; //Добавляем в массив значение по аддрессу
            counter++; //Увеличиваем счетчик массива
        }
 
        address++; //Переходим к следующему параметру путем увеличения указателя на 1
    }
 
    return successCounter; //Возвращаем ответ
}
 
int main()
{
    cout << triangle(5, 0, -1) << endl;
    cout << triangle(5, 7, 6, 0, 8, 9, 10, 0, -1) << endl;
    cout << triangle(5, 7, 6, 0, 8, 9, 10, 0, 8, 2, -1) << endl;
}
Данная программа полностью рабочая на моём стационарнике, но на ноутбуке работает только если вместо address++; сделать address+=2; .

Подскажите, пожалуйста, с чем это может быть связано.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.02.2024, 17:41
Ответы с готовыми решениями:

Работа с арифметикой указателей
Я уже обращался на форум за помощью по данной теме, но накопилось еще несколько вопросов, и буду очень благодарен за вашу помощь и сейчас....

Вывести адрес двумерного массива арифметикой указателей
Двумерный массив располагается в памяти в виде непрерывной цепочки. В программе сначала я вывожу адреса ячеек с помощью стандартной записи....

В чем ошибка - задача с трехмерным массивом и арифметикой указателей
Собсно, задача заключается в том, чтобы найти минимальное значение в трехмерном массиве. Но так как арифметику указателей за столько лет...

25
274 / 206 / 30
Регистрация: 26.11.2022
Сообщений: 903
28.02.2024, 15:30
Студворк — интернет-сервис помощи студентам
надо читать ABI https://ru.wikipedia.org/wiki/... 0%B8%D0%B9 для конкретной системы.
и хитростей там много.
например:
1)некоторые ( обычно первые ) параметры могут передаваться через регистры, а остальные через стек - соответственно у первых нет адреса в стеке.
2)напрмиер для ARM EABI передача параметров float через стек делается с выравниванием по 8 байт. тоесть для самостоятельной реализации printf надо смотреть значение адреса в стеке и корректировать его если он не выровнен - та ещё засада для тех кто первый раз такое делает ))) https://wiki.debian.org/ArmEab... dalignment
3)для разных компиляторов есть опции. напримет во времена watcom (ещё для DOS) у него была опция "fast call" несовместимая со стандартом но там передача параметров была через регистры - но только для тех функция которые вы писали сами, а для стандартных использовалась передача через стек.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
28.02.2024, 16:17
Цитата Сообщение от Aledveu Посмотреть сообщение
надо читать ABI https://ru.wikipedia.org/wiki/... 0%B8%D0%B9 для конкретной системы.
Кому это надо ???
И что с этим потом делать ???
0
274 / 206 / 30
Регистрация: 26.11.2022
Сообщений: 903
28.02.2024, 16:49
Цитата Сообщение от SmallEvil Посмотреть сообщение
Кому это надо ???
И что с этим потом делать ???
попробую сыграть роль К.О. :

вот если вам понадобится разбираться в хитростях передачи параметров то вам и надо будет это читать.
может вы захотите какую-нибудь функцию на ассемблере написать - кто же вас знает.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
28.02.2024, 17:47
Цитата Сообщение от Aledveu Посмотреть сообщение
если вам понадобится разбираться в хитростях передачи параметров
С++ же, все хитрости в стандарте его.

Цитата Сообщение от Aledveu Посмотреть сообщение
может вы захотите какую-нибудь функцию на ассемблере написать
С++ же
на кой мне ассемблер ???
0
274 / 206 / 30
Регистрация: 26.11.2022
Сообщений: 903
28.02.2024, 21:32
Цитата Сообщение от SmallEvil Посмотреть сообщение
С++ же, все хитрости в стандарте его.
вам просто мало приходилось писать программы при отсутствии стандартной библиотеки и с разными архитектурами.
у меня был случай когда пришлось использовать самописный snprintf с поддержкой плавающей арифметики и он в одной строке часть флоатов выводил нормально а другие были мусором, причем одинаковый вызов функции в разных местах программы приводил к разным результатам. И естественно этот snprintf работал через указатель на стек ибо stdarg.h нету.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
01.03.2024, 12:09
Цитата Сообщение от Aledveu Посмотреть сообщение
И естественно этот snprintf работал через указатель на стек ибо stdarg.h нету
Цитата Сообщение от Aledveu Посмотреть сообщение
при отсутствии стандартной библиотеки и с разными архитектурами.
И что это должно изменить ?
Убогий С++ под убогой архитектурой.
Это вам к псевдо-программистам микроконтроллеров.
А не тут разводить флуд!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.03.2024, 12:09

Проблема при итерации массива указателей
Здравствуйте! Вкратце: программа моделирует процесс развития популяции двух видов животных. Имеется массив указателей на объекты,...

Проблема освобождения указателя из статического массива указателей
Есть у меня вот такое вот. И оно не компилируется. #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;vector&gt; #include...

Проблема с массивом указателей: уменьшение длины массива
Привет! Столкнулся с такой проблемой: Создаем динамический массив указателей, потом хотим уменьшить его длину. А фиг там. type ...

Запрос с арифметикой
Приветствую, помогите, пожалуйста, вот с таким вот запросом. Есть база данных, которая состоит из двух таблиц, студентов и курсов. ...

Работа с длинной арифметикой
Дорогие программисты, кто-нибудь уже писал класс для работы с очень большими числами, с поддержкой операторов +-/*, если да, то дайте,...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru