Да, вы можете использовать перечисления для создания символических констант для каждого индекса:
enum { apples, carrot, bread, dinosaur };
Вы также можете использовать обычные переменные:
const int apples = 0;
const int carrot = 1;
const int bread = 2;
const int dinosaur = 3;
Вы также можете использовать препроцессор:
#define APPLES 0
#define CARROT 1
#define BREAD 2
#define DINOSAUR 3
То, что вы не можете сделать, - это создать любую из этих вещей во время выполнения .Если вы решите во время выполнения создать массив 5x5, вы также не сможете создать новую символическую константу (через enum
или переменную или макрос).Это может быть сделано только во время компиляции.
РЕДАКТИРОВАТЬ
Что вы можете можете сделать - это создать некую ассоциативную структуру данных (карту или таблицу поиска), которая связывает строку с целым числомзначение, а затем вы можете сделать что-то вроде ...
Some_Map_Type map;
...
addIndex( map, "apples", 0 );
addIndex( map, "carrot", 1 );
addIndex( map, "bread", 2 );
addIndex( map, "dinosaur", 3 );
...
do_something_with( matrix[getIndex(map, "apples")][getIndex(map, "bread")] );
, а затем во время выполнения запросить новое имя индекса и значение, например:
printf( "Gimme a new index: " );
scanf( "%s %d", name, &value ); // doing it this way *just* for brevity - don't actually do it like this
addIndex( map, name, value );
...
do_something_with( matrix[getIndex(map, name)][getIndex(map, "bread")] );
Это может или не можетстоить усилий для вас.