powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ручное назначение номеров индексов массива
25 сообщений из 93, страница 1 из 4
Ручное назначение номеров индексов массива
    #39261322
ukugyul552465
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К примеру, есть массив int numbers[4], он состоит из элементов:
numbers[0];
numbers[1];
numbers[2];
numbers[3];
Можно ли переназначить индекс элементов, чтобы массив int numbers[4] состоял из элементов:
numbers[2000];
numbers[2001];
numbers[2002];
numbers[2003].
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39261326
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ukugyul552465Можно ли
Можно: объяви массив классом, переопредели операцию [] и там можешь спокойно вычитать из
индекса свои 2000.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39261328
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да проще наверное сделать минус 2000.
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39261349
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это уже map какой-то получается, вот только последовательного расположения данных в памяти не будет.
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39261389
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В паскале это работает из коробки.

Я могу щас ошибаться в синтаксисе но где-то так

Код: pascal
1.
2.
type
  numbers=array [2000..2003] of integer;
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39261392
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ паскале это работает из коробки.

Я могу щас ошибаться в синтаксисе но где-то так

Код: pascal
1.
2.
type
  numbers=array [2000..2003] of integer;

даже в Бейсике не к ночи будь помянут
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39261415
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ukugyul552465К примеру, есть массив int numbers[4], он состоит из элементов:
numbers[0];
numbers[1];
numbers[2];
numbers[3];
Можно ли переназначить индекс элементов, чтобы массив int numbers[4] состоял из элементов:
numbers[2000];
numbers[2001];
numbers[2002];
numbers[2003].


можно.
только нахрена?
чета времена у нас пошли суровые,
один 25 тыщ потоков для опроса DNS создает, другой элементы массива с 2000 хочет нумеровать...
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39261607
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автору поможет Стебелек, который как известно работает
опережая релятивистские скорости распространения электрического-поля в металлах.
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39261660
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ukugyul552465,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#include <iostream>

int numbers[4] = { 0, 1, 2, 3 };

#define numbers (numbers - 2000)

int main() {
    for (int i = 2000; i < 2004; i++) {
        std::cout << "numbers[" << i << "] = " << numbers[i] << std::endl;
    }
    return 0;
}

Вывод:
Код: plaintext
1.
2.
3.
4.
numbers[2000] = 0
numbers[2001] = 1
numbers[2002] = 2
numbers[2003] = 3
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39261696
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman, ага главное не забыть потом сделать undefine
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39261717
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Смею предположить что ТС-у
это нужно ,
но он не может нормально задать вопрос.....
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39267168
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ukugyul552465К примеру, есть массив int numbers[4], он состоит из элементов:
numbers[0];
numbers[1];
numbers[2];
numbers[3];
Можно ли переназначить индекс элементов, чтобы массив int numbers[4] состоял из элементов:
numbers[2000];
numbers[2001];
numbers[2002];
numbers[2003].

Можно попробовать выстрелить себе в ногу

Код: plaintext
1.
2.
3.
4.
5.
    int ar[4]  = {1,2,3,4};
    int *p_ar = &ar[0]-2000;

    p_ar[2000] = 100;
    p_ar[2001] = 100;


но нужно ли?
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39267172
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBaga, nice shot!

Мне нравится.
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39268271
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
так это старый трюк, я думал, уж это-то все знают...
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39268379
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
абсолютно согласен - старый добрый С-style трюк. То ли народ подзабывать стал, то ли молодёжь подрастает )
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39270694
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBagaukugyul552465К примеру, есть массив int numbers[4], он состоит из элементов:
numbers[0];
numbers[1];
numbers[2];
numbers[3];
Можно ли переназначить индекс элементов, чтобы массив int numbers[4] состоял из элементов:
numbers[2000];
numbers[2001];
numbers[2002];
numbers[2003].

Можно попробовать выстрелить себе в ногу

Код: plaintext
1.
2.
3.
4.
5.
    int ar[4]  = {1,2,3,4};
    int *p_ar = &ar[0]-2000;

    p_ar[2000] = 100;
    p_ar[2001] = 100;


но нужно ли?

И зачем так пробовать? Разве в данном случае мы не имеем ub?
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39270713
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

индексация — просто сахар для сложения с последующим разыменованием, какое тут UB?
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39270742
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolfиндексация — просто сахар для сложения с последующим разыменованием, какое тут UB?
прямейшее.

Код: plaintext
1.
int *p_ar = &ar[0]-2000;

может просто не исполниться на ряде архитектур

Например на 80286 в защищённом режиме
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39270743
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

это то же, что
Код: plaintext
1.
int *p_ar = ar - 2000;
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39270747
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А всегда-ли выпрыгивание за границы аррея это ошибка?

ЕМНИП в каких-то языках (толи PHP толи Пайтон) можно было
"кружить кругами" по массиву если индекс был за границей.
По сути MOD (n).
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39270755
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА всегда-ли выпрыгивание за границы аррея это ошибка?
достаточно того, что это может быть ошибкой.

например в том же защищённом 286 эта операция может привести к записи в сегментый регистр невалидного дескриптора со всеми последствиями.

и чем дальше архитектура от PDP/11 - тем веселее
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39270766
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

разве арифметика с указателем затрагивает сегментные регистры?
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39270770
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolfИзопропил,

разве арифметика с указателем затрагивает сегментные регистры?
легко затронет, если массив имеет длину более 64КБайт
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39270793
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolfSashaMercury,

индексация — просто сахар для сложения с последующим разыменованием, какое тут UB?

В данном случае необходимо сделать отсылку к последней версии стандарта (у меня есть черновик, ссылку на который всем предоставил Анатолий, совсем недавно), в частности к разделу 5.7 Additive operators
С++ 17 N4594 5.7.4When an expression that has integral type is added to or subtracted from a pointer, the result has the type
of the pointer operand. If the pointer operand points to an element of an array object84, and the array is
large enough, the result points to an element offset from the original element such that the difference of the
subscripts of the resulting and original array elements equals the integral expression. In other words, if the
expression P points to the i-th element of an array object, the expressions (P)+N (equivalently, N+(P)) and
(P)-N (where N has the value n) point to, respectively, the i + n-th and i − n-th elements of the array object,
provided they exist. Moreover, if the expression P points to the last element of an array object, the expression
(P)+1 points one past the last element of the array object, and if the expression Q points one past the last
element of an array object, the expression (Q)-1 points to the last element of the array object. If both the
pointer operand and the result point to elements of the same array object, or one past the last element of the
array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined.
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39270828
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

то есть, адресная арифметика определена только в пределах выделенной памяти; ну, видимо, на это были какие-то причины.


Изопропил,

хм, как-то не попадались мне такие модели памяти, в которых инкремент указателя может повалить программу. Глянуть бы листинг для иллюстрации.
...
Рейтинг: 0 / 0
25 сообщений из 93, страница 1 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ручное назначение номеров индексов массива
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]