获取C中地址的唯一方法(与双引用相反,有一个中间变量?
我有:
int a;
int b;
int *ptr_a;
int *ptr_b;
int **ptr_ptr_a;
a = 1;
ptr_a = &a;
ptr_ptr_a = &(&a); <- compiler says no
ptr_ptr_a = &&a; <- still compiler says no
ptr__ptr_a = &ptr_a; <- ok but needs intermediate variable
Run Code Online (Sandbox Code Playgroud)
但你可以做反过来,例如
b = **ptr_ptr_a; <- no intermediate variable required
Run Code Online (Sandbox Code Playgroud)
例如,我不必这样做:
ptr_b = *ptr_ptr_b;
b = *ptr_b;
Run Code Online (Sandbox Code Playgroud)
为什么两个运营商的功能不对称?
用这样的示例内存布局解释可能更容易:
Var Adr value
---------------------
a 1000 1
ptr_a 1004 1000
ptr_ptr_a 1008 1004
1008 1004 1008->1004->1000
You can obviously dereference ptr_ptr_a twice *ptr_ptr == ptr_a, **ptr_ptr_a == 1
Run Code Online (Sandbox Code Playgroud)
但是,如果变量a不是指针的地址,那么变量有一个地址(1000)地址的地址是什么意思? &a是最后一站.因此&&a没有任何意义.