C语言中如何找到变量的地址位置?

Smo*_*kus 0 c

我编写了一个定义 3 个int变量的程序,并使用%p格式说明符将它们打印出来。输出如下:

0000000000000001
0000000000000002
0000000000000003
Run Code Online (Sandbox Code Playgroud)

我现在的问题是如何找出这些变量在内存中的存储位置。由于我使用 %p 格式说明符,输出是否已经是内存中存储变量的地址?

这是我的代码:

int main(void)
{
   int iX1 = 1;
   int iX2 = 2;
   int iX3 = 3;

   printf("%p\n", iX1);
   printf("%p\n", iX2);
   printf("%p\n", iX3);

   return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

d3L*_*d3L 5

%p只是您提供的数据的格式说明符。

要获取变量的地址,请使用&如下运算符:

#include <stdio.h> // printf
#include <stdlib.h> // EXIT_SUCCESS

int main(void)
{
   int iX1 = 1;
   int iX2 = 2;
   int iX3 = 3;

   printf("%p\n", (void*){&iX1});
   printf("%p\n", (void*){&iX2});
   printf("%p\n", (void*){&iX3});


   return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

输出:

0x7ffee4f7e8e8
0x7ffee4f7e8e4
0x7ffee4f7e8e0
Run Code Online (Sandbox Code Playgroud)

  • @PeterCordes 2.问:为什么通过复合文字而不是直接“转换”?答:只是一般的风格偏好,因为它往往更温和,而且几乎不再冗长。强制转换非常强大并且可能很危险,特别是在指针类型之间进行强制转换时。通过复合类型文字进行的转换功能要弱得多(例如,可以向目标添加 const,但它不会在截然不同的指针类型之间进行转换,除非涉及 void*)。只有编辑的“#include &lt;stdlib.h&gt;”部分是必需的。`void*` 类型转换满足迂腐的正确性。`(void*){}` 是个人风格。 (2认同)