C语言:隐式指针解除引用

时间:2016-03-12 21:21:12

标签: c

在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;

但这显然是在寻找麻烦......

2 个答案:

答案 0 :(得分:2)

不,没有任何技巧可以让你隐式取消引用指针。

但是,您在编辑中提到的预处理器技巧可以隐藏显式解除引用,使其看起来是隐式的:

#define my_alias (*my_var_ptr)

但请注意,您应该在表达式周围放置圆括号,这样可以避免在编写时遇到麻烦

my_alias++;

答案 1 :(得分:0)

不,#define是在C中执行此操作的唯一方法。

C ++有称为"引用"哪些是隐式解除引用,但可以(必须?)别名其他对象。你不得不问别人有关细节的事。但是C不支持任何这样的事情。