在C中,是否可以为解除引用的指针定义别名/快捷方式?
即。假设一个定义:
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;
但这显然是在寻找麻烦......
答案 0 :(得分:2)
不,没有任何技巧可以让你隐式取消引用指针。
但是,您在编辑中提到的预处理器技巧可以隐藏显式解除引用,使其看起来是隐式的:
#define my_alias (*my_var_ptr)
但请注意,您应该在表达式周围放置圆括号,这样可以避免在编写时遇到麻烦
my_alias++;
答案 1 :(得分:0)
不,#define
是在C中执行此操作的唯一方法。
C ++有称为"引用"哪些是隐式解除引用,但可以(必须?)别名其他对象。你不得不问别人有关细节的事。但是C不支持任何这样的事情。