Мне нужна небольшая помощь с массивами и указателями, если это возможно...
Я определил некоторые константные строки:
static const Int8U item1[] = {0x4D, 0x61, 0x72, 0x74, 0x65, 0x6C, 0x20, 0x4D, 0x43, 0x50, 0x37, 0x38, 0x31, 0x30, 0x00};
static const Int8U item2[] = {0x4D, 0x61, 0x74, 0x65, 0x6C, 0x20, 0x4D, 0x43, 0x50, 0x37, 0x38, 0x31, 0x30, 0x00};
static const Int8U item3[] = {0x4D, 0x61, 0x65, 0x6C, 0x20, 0x4D, 0x43, 0x50, 0x37, 0x38, 0x31, 0x30, 0x00};
Я ссылаюсь на эти строки в массиве указателей:
const Int8U* original_sequence[] =
{
item1,
item2,
item3
}
#define SEQUENCE_ELEMENT_1 (0)
#define SEQUENCE_ELEMENT_2 (1)
#define SEQUENCE_ELEMENT_3 (2)
Я могу сослаться на любую из строк с помощью чего-то похожего на:
original_sequence[SEQUENCE_ELEMENT1]
Пока все хорошо. Однако есть и другая конфигурация, состоящая из тех же элементов, только в другом порядке. В идеале я хотел бы сделать следующее, объявленное с глобальной областью действия:
const CHAR *new_sequence[3] =
{
original_sequence[SEQUENCE_ELEMENT_2],
original_sequence[SEQUENCE_ELEMENT_1],
original_sequence[SEQUENCE_ELEMENT_3]
};
Однако я получаю сообщение об ошибке «выражение должно иметь постоянное значение». Обратите внимание, что я не могу напрямую ссылаться на «item1» и т. д., потому что #define являются ключевыми в идентификации.
Я также пробовал варианты этого, например:
const CHAR **new_sequence[3] =
{
(char**)original_sequence[SEQUENCE_ELEMENT_2].
(char**)original_sequence[SEQUENCE_ELEMENT_1].
(char**)original_sequence[SEQUENCE_ELEMENT_3]
};
Ничто меня никуда не ведет. Я не могу понять, путаюсь ли я с указателями или нарушаю ограничения компилятора? То, что заставляет меня думать, что это не ограничение, заключается в том, что если бы я должен был ссылаться на строки «item1» непосредственно в этом новом массиве, я не думаю, что возникла бы проблема.
Спасибо,
Роб
.
вместо,
в нескольких местах.array_one
иarray1
должны быть одним и тем же? - person aschepler   schedule 03.10.2020