结构体

关于求直角三角形斜边长的问题:

通常,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 { 域定义; }类型名;”的方式定义一个 新类型名。这样,就可以像原生数据类型一样使用这个自定义类型。

posted @ 2019-02-16 13:50  芩溪儿  阅读(196)  评论(0编辑  收藏  举报