&y是什么?它是指针变量 y 在内存中的地址吗?
是的。您也可以拥有指向指针的指针。
int x = 357;
int *y = &x;
int **z = &y;
指针变量 y 是什么?它是否保存变量 x 的地址?
是的。基本上,它是一个整数类型,(作为它的值)保存“x”的地址。
&x 是什么?是变量 x 本身在内存中的地址还是它的值 1025 的地址?
变量的地址,它是一个整数,也是存储值的地方。
什么是变量 x?是它的值的地址,1025?
它是存储数据的几个字节的内存位置。如何解释数据取决于使用它的代码。对于整数,数据旨在表示一个数字(如 1025),但它可以像其他东西一样容易地被操纵,如几个字符或浮点数。内存中的数据仅仅是内存中的数据——赋予它意义的是它的使用方式。
什么是*y?是 1025 = variable x 的地址吗?
1025只是存储在'x'地址的数据,存储在这些内存字节中的值根本不会改变'x'的位置。一旦创建了“x”,它在内存中的位置(在其生命周期内)就不会改变。
所以 *y 是 x。*y “取消引用”存储在“y”(x 的地址)中的地址,因此您正在对“x”和“*y”都引用的内存块进行操作。
如果打印 &y 显示 y 的地址,打印 &x 显示 x 的地址,但打印 x/*y 只是打印 1025,我将如何打印 1025 的地址?
打印 x/*y 应该打印x = 1025. *y = 1025. 1025/1025 = 1
1。1025 没有地址。1025 是某处几个字节中的一堆位。1025 是存储在几个字节中的位序列(您的代码赋予其含义,但它本身没有意义)位于存储在“x”和“*y”中的地址处。
如果我们假设一个整数是四个字节的内存(比方说 32 位操作系统和硬件),那么您在 RAM 中的某个随机位置有四个字节:
[01000100] [1101010] [00101001] [11010101] (gibbish binary for illustration)
存储在这四个字节中的二进制位并不意味着什么,直到您的代码决定如何解释这些位的含义。
'x'是这四个字节。1025 被转换为二进制并存储在这四个字节中。“x”的地址就是这四个字节的地址。'y' 是存储 'x' 的地址的一大块字节。'*y' 允许您对 'y' 存储地址的字节进行操作。访问 *y 会给出指向 x 所指的相同字节。