C语言强化-第六章

第六章-结构体

  • 用结构体声明一个点的坐标,也是最简单的结构体声明过程
    struct point {
      int x;
      int y;
    }
    
    其中,struct引入结构声明,point为结构标记(可选),x,y为成员。
  • struct定义了一种结构类型。在标志结构成员表结束的右花括号之后可以跟一个变量表,这与其他基本变量的声明是相同的。例如
    struct {……} xlable,ylable;
    
    同时,为了方便,可以用结构标记来代替花括号中的内容。例如
    struct point xlable,ylable;
    
  • 通过赋值初始化:
    struct point maxpt = {300,200};
    
  • 可以通过结构名.成员来访问某个特定结构中的成员。
  • 结构可以嵌套。
  • 对结构的合法操作有
    • 作为一个整体赋值和复制
    • 取地址
    • 访问成员
  • 建立一个struct类型的函数
    struct point makepoint(int x,int y)
    {  
      struct point temp;
      
      temp x = x;
      temp y = y;
      return temp;
    }//返回一个point类型的结构体。
    
  • 结构体指针类似于一个普通变量指针。声明
    struct point *pp
    
    将pp定义为一个指向struct point类型的指针。如果pp指向一个point结构,那么pp及为该结构,而(pp).x和(*pp).y则是结构成员。因为.的优先级比*要高,故要加括号。
    结构指针的使用频率非常高,因此C语言为了方便使用,定义了另外一种表达方式
    假定p是一个指向结构的指针,可以用
    p->结构成员
    这种形式引用结构成员。
    printf("origin is (%d,%d)\n",(*pp).x,(*pp).y);
    printf("origin is (%d,%d)\n",pp->x,pp-y);
    
    这两句的意思是相等的。
  • 结构数组
    struct key{
      char *word;
      int count;
    } keytab[NKEYS];
    
    声明了一个结构类型key,并定义了该类型的结构数组keytab,同时为其分配结构空间。数组keytab的每一个元素都是一个结构。
    初始化:
    struct key{
      char *word;
      int count;
    }keytab[] = {
      "auto", 0,
      "break", 0,
      ......
      "while", 0,
    };
    
  • typedef
    用法
    type 类型名 自定义名
    typedef结构体:
    typedef struct tnode{
      char *word;
      int count;
      Treeptr left;
      Treeptr right;
      } Treenod;
    
    定义了一个treenod类型的数据。

PS

结构作为参数的优点:
(1) 编程风格更加的直接、清晰。
(2) 由于其改变的是副本,所以比处理原始数据相比更加的安全。
结构体指针作为参数的优点:
(1) 只需要传递一个单个地址即可;
(2)处理数据更加的方便,效率较高。

posted @   宋琦琦  阅读(39)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起