Это отличный вопрос.На самом деле в C нет простого способа сделать это, поскольку система типов, хотя и слабая, обязывает выбирать тип для каждой переменной, а это означает, что без какой-либо дополнительной структуры вы не сможете получить элементы массива.int или ссылка на переменную.
Один из способов сделать это состоит в том, чтобы каждый элемент массива был теговым объединением, например, таким:
typedef struct {
enum { Constant, Variable } type;
union {
int value; // If this is a constant
int* ref; // If this is a reference to a variable
} value;
} Expression;
Теперь ваш массивэлементы могут быть либо константой (в которой установлено поле значения), либо переменной, и в этом случае поле ref будет указателем на фактическую переменную, содержащую значение.
Если это не совсем то, чтоВы хотите, вы можете легко вносить изменения.Если вы хотите хранить символические ссылки вместо жестких ссылок (например, чтобы сохранить, что запись является «переменной X» вместо «указателя на какое-то другое значение»), вы можете добавить другую перечисляемую константу и поле, содержащее имяпеременная.