检索有关&& x的信息,该信息保留&x的地址

Alg*_*bra 1 c

我想用以下代码探索指针的专长:

#include <stdio.h>
int x = 3;
int main(void)
{
    printf("x's value is %d, x's address is %p", x, &x);
    //printf("x's address is stored in", &&x);
}
Run Code Online (Sandbox Code Playgroud)

它工作正常并获得输出

$ ./a.out
x's value is 3, x's address is 0x10b1a6018
Run Code Online (Sandbox Code Playgroud)

当我利用时&x,为它保留一个存储空间以保持地址0x10b1a6018,因此打印一个地址.

接下来,我打算获取有关存储另一个地址的地址的信息.

#include <stdio.h>
int x = 3;
int main(void)
{
    printf("x's value is %d, x's address is %p", x, &x);
    printf("x's address is stored in", &&x);
}
Run Code Online (Sandbox Code Playgroud)

但它报告错误为:

$ cc first_c_program.c 
first_c_program.c:14:40: warning: data argument not used by format string [-Wformat-extra-args]
    printf("x's address is stored in", &&x);
           ~~~~~~~~~~~~~~~~~~~~~~~~~~  ^
first_c_program.c:14:42: error: use of undeclared label 'x'
    printf("x's address is stored in", &&x);
                                         ^
1 warning and 1 error generated.
Run Code Online (Sandbox Code Playgroud)

我如何检索有关存储值x的地址的内存地址的信息.

mel*_*ene 5

&x是一个临时值.它不存储在内存中,也没有地址.

同样&42是无效的,因为42它没有存储在内存中(它也是一个临时值).

您得到的稍微奇怪的错误消息是因为gcc实现了一元运算&&符,可用于获取标签的地址.这是C语言的非标准扩展.

要获得更好的错误消息,请使用& &x(带空格)或&(&x).

但你想要的根本就不存在.