变量地址

时间:2017-08-09 10:40:03

标签: c pointers

我在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是什么意思?

5 个答案:

答案 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)

&安培;只是为了得到内存盒的内容尝试使用指针。

https://www.tutorialspoint.com/cprogramming/c_pointers.htm