我在C中试验了指针的行为。我编写了以下程序:
#include <stdio.h>
main(){
int a = 1;
printf("%p\n", &&a);
}
我知道这个程序会给出错误。因为地址的地址不明确,这将变得非常递归。但是当我尝试编译程序时,它给出了一个我无法理解的错误。
错误:标签'a'已使用但未定义
printf(“%p \ n”,&amp;&amp; a);
label ‘a’ used but not defined
是什么意思?
答案 0 :(得分:6)
&&
是真正的gcc
扩展名,但不适用于变量。它用于标签。
&&a
用于get the address of a label defined in the current function。
在您的案例中,编译器推断出a
后跟&&
运算符的结果为label
,但您还没有定义任何label
a
在你的代码中,这就是错误。
答案 1 :(得分:4)
这不是您问题的直接答案。对于任何想知道为什么在df = pd.read_csv('my_zipped_csv.zip')
这样的事情都可以定义的情况下你不能获取地址的人来说,它更有用。
地址没有拥有地址。只有内存中的实际变量才有地址。你可以在一个指针变量中放置一个地址(如这里的其他答案中所述),然后指针变量将有一个地址,但指针中保存的地址值本身没有它自己的地址。
地址实际上是#34;其中有些东西是&#34;。试图找到地址的地址就像试图问我的车在哪里?&#34;
因此char **ptr;
不是地址的地址,而是包含指针变量的地址的变量。
答案 2 :(得分:2)
您不能获取地址运算符返回的rvalue-temporary的地址。 &安培;&安培;是一个gcc扩展: https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
答案 3 :(得分:1)
这很合乎逻辑,地址不是存在于物理内存的地方 - 所以它不能拥有地址本身。这就是&&
运算符可用于其他目的的原因。
如果你尝试
int x ;
printf("%d\n", &x); // valid
printf("%d\n", &(&x)); // error lvalue required as the address is not the object
答案 4 :(得分:0)
&安培;只是为了得到内存盒的内容尝试使用指针。