对指针感到困惑

时间:2014-01-16 23:22:34

标签: c++ pointers

我刚刚开始学习c ++(我现在更像是一个java开发人员)并且使用指针时有些困惑...例如,以下代码可以正常工作

int main() {
    int x = 5;
    int * y;
    y = &x; //note this line of code
    *y = 10;
}

而此代码不起作用

int main() {
     int x = 5;
     int * y;
     y = x;
     *y = 10;
}

有人可以向我解释为什么使用y = &x获取值“location”有效,但只要我用y = x替换它就会导致错误。如果有人知道关于指针的好解释,请分享链接:)

谢谢!

3 个答案:

答案 0 :(得分:7)

让我们看一下如何使用指针。

int x = 5;

您将值5分配给x,即int。

int *y;

你正在声明一个指向int的指针。

y = &x;

现在,存储在y中的地址与x的地址相同。

但是,如果你这样做:y = x,你将一个整数(在这种情况下为5)分配给一个包含地址整数的变量。

最后,你必须记住:

  • &是地址运算符,可以读作“地址”
  • *是间接运算符,可以读作“由......指向的值”

Tutorial about pointers

答案 1 :(得分:0)

y是指向int的指针。 x int。因此,无论何时设置y=x,您都会告诉y每当它被取消引用时,它应该查看内存位置10(或任何x在分配时间)。并且10可能没有内存分配。或者至少不是你所期待的。如果您想获取x的位置,请使用&x获取指向它的指针。

int main() {
     int x = 5;
     int * y;
     y = &x; // <-- NOTE THE "&" WHICH MEANS GET REFERENCE
     *y = 10;
}

答案 2 :(得分:0)

指针是保存内存位置的变量。在您的实例中,变量&#34; x&#34;保持值5,其中变量y在内存中保存一个位置。 &#34;&amp;&#34;运算符将使您能够使用&#34; x&#34;内存中的位置。变量

cout >> x; //will give you an output of 5.
cout >> &x; //will give you an output of the memory location of the variable x.

y = &x;
cout >> y; //will give you an output of the memory location of the variable x.