0 / 0 / 0
Регистрация: 24.02.2024
Сообщений: 16

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

27.02.2024, 17:41. Показов 1331. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru