Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ручное назначение номеров индексов массива / 25 сообщений из 93, страница 1 из 4
23.06.2016, 19:28
    #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
23.06.2016, 19:39
    #39261326
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ручное назначение номеров индексов массива
ukugyul552465Можно ли
Можно: объяви массив классом, переопредели операцию [] и там можешь спокойно вычитать из
индекса свои 2000.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.06.2016, 19:41
    #39261328
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ручное назначение номеров индексов массива
Да проще наверное сделать минус 2000.
...
Рейтинг: 0 / 0
23.06.2016, 20:09
    #39261349
wst
wst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ручное назначение номеров индексов массива
Это уже map какой-то получается, вот только последовательного расположения данных в памяти не будет.
...
Рейтинг: 0 / 0
23.06.2016, 22:02
    #39261389
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ручное назначение номеров индексов массива
В паскале это работает из коробки.

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

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

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

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

даже в Бейсике не к ночи будь помянут
...
Рейтинг: 0 / 0
23.06.2016, 23:26
    #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
24.06.2016, 10:56
    #39261607
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ручное назначение номеров индексов массива
Автору поможет Стебелек, который как известно работает
опережая релятивистские скорости распространения электрического-поля в металлах.
...
Рейтинг: 0 / 0
24.06.2016, 11:44
    #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
24.06.2016, 12:22
    #39261696
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ручное назначение номеров индексов массива
Usman, ага главное не забыть потом сделать undefine
...
Рейтинг: 0 / 0
24.06.2016, 12:36
    #39261717
д0k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ручное назначение номеров индексов массива
Смею предположить что ТС-у
это нужно ,
но он не может нормально задать вопрос.....
...
Рейтинг: 0 / 0
04.07.2016, 11:05
    #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
04.07.2016, 11:07
    #39267172
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ручное назначение номеров индексов массива
BagaBaga, nice shot!

Мне нравится.
...
Рейтинг: 0 / 0
05.07.2016, 19:16
    #39268271
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ручное назначение номеров индексов массива
mayton,
так это старый трюк, я думал, уж это-то все знают...
...
Рейтинг: 0 / 0
05.07.2016, 23:23
    #39268379
BagaBaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ручное назначение номеров индексов массива
MasterZiv,
абсолютно согласен - старый добрый С-style трюк. То ли народ подзабывать стал, то ли молодёжь подрастает )
...
Рейтинг: 0 / 0
08.07.2016, 15:40
    #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
08.07.2016, 15:57
    #39270713
RWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ручное назначение номеров индексов массива
SashaMercury,

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

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

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

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

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

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

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

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

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

разве арифметика с указателем затрагивает сегментные регистры?
легко затронет, если массив имеет длину более 64КБайт
...
Рейтинг: 0 / 0
08.07.2016, 17:13
    #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
08.07.2016, 17:47
    #39270828
RWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ручное назначение номеров индексов массива
SashaMercury,

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


Изопропил,

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


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