我把这个问题作为练习,但是一旦到达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);
答案 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