在该行中:
整数 x;
你分配了一块“int”大小的内存。
为了这个解释,我们假设 int 的大小是 4 个字节(它可能不是 4 个字节)。
所以在“int x;”行之后内存中有 4 个字节分配给“x”。
“x”的值在这 4 个字节内:
例如,如果 x=4,那么它将在内存中看起来像这样:
[0, 0, 0, 4] 或二进制 [0000000, 00000000, 00000000, 00000010]。
(在现实生活中也可能是 [4, 0, 0, 0],但我不会深入探讨)。
所以 x 的 VALUE 是 4。
但是假设我想要“x”的地址,它被放置在内存中。
这就是操作符“&”发挥作用的地方,使用这个操作符我请求x的地址。
因此,如果 [0, 0, 0, 4] 从内存中的位置“0x12341234”开始,&x 将返回该位置 (0x12341234)。
现在,如果我想将地址存储在一个变量中,这个变量的类型不是“int”,而是指向被标记为“int*”的 int 的地址。
所以:
int x = 4; //
如果有这样声明的方法:
void mymethod(int x) 比我们传递 x 的值,所以该方法被称为 mymethod(x)。
如果有这样声明的方法:
void mymethod(int* x) 比我们传递一个 POINTER 到 x 的地址,所以这个方法被称为 mymethod(&x)。
这真的只是冰山一角,我真的尽量保持简单,所以如果你还有其他问题,尽管问!
还有一些术语称为“按值”和“按引用”,但您仍然需要更好地理解 int 和 int* 之间的区别,而不是“按值”和“按引用”会很自然。