我只是确保我正确理解这个概念。使用*运算符,我创建一个新变量,在内存中分配一个位置。为了不会不必要地复制变量及其值,&运算符用于将值传递给方法等,它实际上指向变量的原始实例,而不是创建新副本......是吗?这显然是一种浅薄的理解,但我只是想确保我不会让他们混淆。谢谢!
答案 0 :(得分:40)
不完全。您使用*
运算符混淆了出现在类型名称(用于定义变量)中的*
。
int main() {
int i; // i is an int
int *p; // this is a * in a type-name. It means p is a pointer-to-int
p = &i; // use & operator to get a pointer to i, assign that to p.
*p = 3; // use * operator to "dereference" p, meaning 3 is assigned to i.
}
答案 1 :(得分:12)
使用&
来查找变量的地址。所以如果你有:
int x = 42;
和(例如)计算机已将x
存储在地址5
,&x
将为5
。同样,您可以在名为指针的变量中存储该地址:
int* pointer_to_x = &x; // pointer_to_x has value 5
一旦有了指针,就可以使用*
运算符取消引用将其转换回它指向的类型:
int y = *pointer_to_x; // y is assigned the value found at address "pointer_to_x"
// which is the address of x. x has value 42, so y will be 42.
答案 2 :(得分:4)
当变量与*运算符配对时,该变量保存一个存储器地址。
当它与&配对时运算符,它返回保存变量的地址。
如果你有
int x = 5; //5 is located in memory at, for example, 0xbffff804
int *y = &x; //&x is the same thing as 0xbffff804, so y now points to that address
x
和*y
都会产生5