在书中解释说:
ptr = &a /* set ptr to point to a */
*ptr = a /* '*' on left:set what ptr points to */
他们对我来说似乎是一样的,不是吗?
答案 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;