我想用以下代码探索指针的专长:
#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的地址的内存地址的信息.
&x是一个临时值.它不存储在内存中,也没有地址.
同样&42是无效的,因为42它没有存储在内存中(它也是一个临时值).
您得到的稍微奇怪的错误消息是因为gcc实现了一元运算&&符,可用于获取标签的地址.这是C语言的非标准扩展.
要获得更好的错误消息,请使用& &x(带空格)或&(&x).
但你想要的根本就不存在.