ptr =& a和* ptr = a是否相同?

时间:2012-07-16 11:52:15

标签: c pointers

在书中解释说:

ptr = &a /* set ptr to point to a */

*ptr = a /* '*' on left:set what ptr points to */

他们对我来说似乎是一样的,不是吗?

5 个答案:

答案 0 :(得分:7)

没有。第一个更改指针(它现在指向a)。第二个改变了指针指向的东西。

考虑:

int a = 5;
int b = 6;

int *ptr = &b;

if (first_version) {
    ptr = &a;
    // The value of a and b haven't changed.
    // ptr now points at a instead of b
}
else {
    *ptr = a;
    // The value of b is now 5
    // ptr still points at b
}

答案 1 :(得分:0)

不,在ptr = &a中,您将变量'a'的地址存储在变量'ptr'中 即,像ptr=0xef1f23

*ptr = a中,您将变量'a'的值存储在指针变量'* ptr'中 即,像*ptr=5

答案 2 :(得分:0)

嗯,不。但要解释类似的行为,请加入Oli Charlesworth的回答:

考虑:

int a = 5;
int* ptr = new int;

if(first_version) {
  ptr = &a;
  //ptr points to 5 (using a accesses the same memory location)
} else {
  *ptr = a;
  //ptr points to 5 at a different memory location
  //if you change a now, *ptr does not change 
}

编辑:抱歉使用new(c ++而不是c),但指针不会改变。

答案 3 :(得分:0)

两者都不相同。

如果您修改a = 10的值,则再次打印* ptr。它只会打印5.而不是10。

*ptr = a; //Just copies the value of a to the location where ptr is pointing.
ptr = &a; //Making the ptr to point the a

答案 4 :(得分:0)

*ptr=&a C ++编译器会生成错误,因为你要为adres分配地址 ptr=&a,这是真的,ptr像变量一样工作,而且& a是包含一些值的地址

检查并尝试

int *ptr,a=10;
ptr=&a;output=10;