`* p =&`和`p =&`之间的区别

时间:2016-11-15 04:55:30

标签: c pointers diagram memory-address dereference

我把这个问题作为练习,但是一旦到达fp0 = &hundred;,我就无法弄清楚该做什么。有人可以帮助我吗?

  

在pointex.c中完成代码片段的工作。会打印什么?

     

使用后面的一些练习画出代表变量的方框   和代表指针的箭头。

//code fragment g
float ten = 10.0F;
float hundred = 100.0F;
float * fp0 = &ten, * fp1 = &hundred;
fp1 = fp0;
fp0 = &hundred;
*fp1 = *fp0;
printf("ten/hundred = %f\n", ten/hundred);

2 个答案:

答案 0 :(得分:0)

让我们从这一行开始:

float * fp0 = &ten, * fp1 = &hundred;

此时,fp0指向ten的地址,因此如果它被*fp0取消引用,则会返回10.0F。同样,*fp1会返回100.0F。 在这一行之后:

fp1 = fp0;

fp1指向ten的地址,因为它的值现在是fp0的值,这只是指向ten的内存位置的地址存储变量。 指针只是地址。取消引用一个返回指针所指向的特定地址处存储的值的值。然后我们有这一行:

fp0 = &hundred;

现在fp0包含hundred变量的地址,因此取消引用它将返回100.00F。下一部分可能有点棘手:

*fp1 = *fp0;

通过取消引用fp1,我们实际上会转到fp1指向的地址,并覆盖以前存储在那里的值(10.0F),其值存储在地址中fp0指向(100.0F)。因此,输出如下:

printf("ten/hundred = %f\n", ten/hundred);

将是"十/百= 1.000000,因为我们将100.0F除以100.0F。

答案 1 :(得分:0)

逐行解释代码。考虑[]表示地址。

float ten = 10.0F;
float hundred = 100.0F;

float * fp0 = &ten, * fp1 = &hundred;

//fp0 --> [10.0F]
//fp1 --> [100.0F]

fp1 = fp0;

//fp1 --> [10.0F]

fp0 = &hundred;

//fp0 --> [100.0F] . fp0 get the address of variable hundred. 
//That means fp0 can change the value stored by variable hundred.

*fp1 = *fp0;  // the value stored at the address `fp1` takes the value stored at the address `fp0`

// [10.0F] --> [100.0F] . Address that was storing 10.0f will now store 100.0f
// So,  ten = 100.0F and hundred = 100.0F

printf("ten/hundred = %f\n", ten/hundred); //prints 1.00000