2016-03-12 2 views
1

В C, можно ли определить псевдоним/ярлык для разыменованного указателя?C-язык: неявный указатель разыменования

I.e. при условии определения как:

void * ptr_to_my_variable = 0x2ff00000; 

Можно ли определить my_variable символ, который соответствует *ptr_to_my_variable, таким образом, что:

*ptr_to_my_variable = 321; 
my_variable = 123; 
if (my_variable == *ptr_to_my_variable) printf "aliasing/shortcut works"; 

Единственное решение, которое я могу думать:

#define my_variable *my_variable 
int my_variable = (int *) 0x2ff00000; 

my_variable = 123; 

Но это явно требует неприятностей ...

+2

Могу ли я спросить, зачем вам это нужно (просто любопытно)? –

+1

Это будет [ссылка в C++] (https://en.wikipedia.org/wiki/Reference_ (C% 2B% 2B)), но эта функция на самом деле не существует в c. –

+0

@arc_lupus Я занимаюсь разработкой некоторых частей более крупной программы, использующей существующие глобальные переменные. Таким образом, фиксируется множество локальных переменных, используемых моей функцией. Это делает мой код уродливым и трудным для понимания: вместо того, чтобы писать 'my_var = 1', он усеяно звездами разыменования' * my_var = 1'. Это затрудняет отличие от реальных переменных указателя. – ARF

ответ

2

Нет, там это не трюк, который позволит вам разыменовать указатель неявно.

Однако препроцессор трюк, который youmentioned в редактировании позволяет скрыть явное разыменование, делая его неявный:

#define my_alias (*my_var_ptr) 

Заметит, однако, что вы должны поместить в круглых скобках выражения, которые wiuld спасти вас от Проблема, когда вы пишете

my_alias++; 
0

Nope, то #define это единственный способ сделать это в C.

C++ есть вещи кал приводимые «ссылки», которые неявно разыменованы, но могут (должны?) псевдонимы других объектов. Вы должны спросить кого-нибудь еще о деталях. Но C не поддерживает такую ​​вещь.