关于求直角三角形斜边长的问题:
通常,x1和y1在语义上属于一个整体 (x1,y1),而x2和y2属于另一个整体(x2,y2),代表两个点的坐标。那么能否设计一个函数,其参数是明显的两个点,而不是4个double型的坐标值呢?
struct Point{ double x, y; };
double dist(struct Point a, struct Point b) {
return hypot(a.x-b.x, a.y-b.y); }
这里出现了一个新内容。上述代码中定义了一个称为Point的结构体,包含两个域: double型的x和y。
这样用起来有些不合习惯:所有用到Point的地方都得写一个struct。有一个方法可以避 开这些struct,让结构体用起来和int、double这样的“原生”类型更接近:
typedef struct{ double x, y; }Point;
double dist(Point a, Point b) {
return hypot(a.x-b.x, a.y-b.y); }
代码中虽然没少几个字符,但是看上去清爽多了!
提示:为了使用方便,往往用“typedef struct { 域定义; }类型名;”的方式定义一个 新类型名。这样,就可以像原生数据类型一样使用这个自定义类型。