|
|
检测点10-2
1.修改源文件c1001.c,去掉对象p和q的初始化器,改用四条表达式语句为它们的成员赋值。这四个表达式里存在左值转换吗?为什么?
参考答案:
# include <stdio.h>
# include <math.h>
int main (void)
{
struct {float x; float y;} p, q;
p.x = 1.0f;
p.y = 5.5f;
q.x = 9.7f;
q.y = 15.2f;
printf ("%.2f\n", sqrt (pow ((q.x - p.x), 2) + pow ((q.y - p.y), 2)));
}
在上述四个表达式里不存在左值转换,因为p.x、p.y、q.x和q.y是赋值运算符的左操作数。
2.在源文件c1001.c中调用了pow函数,该函数需要何种类型的参数?传递的实际参数是什么类型?匹配吗?如果不匹配为何还能调用?
答:pow需要double类型的参娄,但实际传递了float类型的参数,所以不匹配。在这种情况下,会自动将float类型的参数转换为double类型。
|
|