10结构体

1.在C语言中可以使用结构体定义用户自己的数据类型,类似于数组,但是结构体中的成员可以是不同的数据类型。

struct 结构体类型名 变量名;

例如:

struct Student {

  char name[128];

  int age;

  float score;

}; // 定义了一个名为Student的数据类型,该类型是一个结构,包括name、age、score三个成员

struct Student student; // 定义了一个名为student的变量,该变量是struct Student类型的

struct Student student2;

struct Student student3;

先用typedef定义结构体类型别名,再用该别名定义变量

typedef 原始类型 类型别名;

typedef unsigned int UINT;

UINT a; // 等价于unsigned int a;

typedef int BOOL;

typedef struct Student {

  char name[128];

  int age;

  float score;

} STU;

STU student;

STU student2;

STU student3;

嵌套结构:一个结构体类型中的某个成员也是结构体类型的。例如:

struct Student {

  char name[128];

  int age;

  float score;

  struct Date {

    int year;

    int month;

    int day;

  } birthday;

};

2.结构型变量及数组的初始化

通过{}对结构型变量进行初始化s。

3.访问结构体的成员

1)通过变量访问成员:用.运算符,亦称成员访问运算符。

2)通过指针访问成员:用->运算符,亦称间接成员访问运算符。

4.结构类型的变量可以作为函数的参数,但是与基本类型参数的情况一样,虚实结合的过程只是值的复制,因此在函数内部对形参所做的修改,不会影响实参。如果希望函数能够改变实参的值,应该传入变量的地址。

5.即使是以读方式访问形参的函数,仅仅出于性能的考虑,也可以以地址方式传参,避免结构复制所带来的开销。为了防止在函数中意外地修改实参,可以用常量指针定义参数。

 

include <stdio.h>

typedef struct Date
{
  int year;//
  int month;//
  int day;//
}DATE;//定义struct Date类型,及其别名为DATE,三个int成员

struct Student//st->birthday.year
{
  char m_name[128];//姓名
  int n_age;//年龄
  DATE birthday;//出生时间
}sa={"习惯了",21,{1996,9,21}};//sa是结构体Student的变量。

typedef struct Student STU;

void show(const STU *st)
{
  printf("姓名:%s\n",st->m_name);
  printf("年龄:%d\n",st->n_age);
  printf("生日:%d年%d月%d日\n",st->birthday.year,
  st->birthday.month,st->birthday.day);
}

void grow(STU *st)
{
  st->n_age++;
}
void main()
{
  STU s4 = {"空城",18,{1996,10,5}};
  //STU *ps = &s4;
  STU *ps;
  ps=&s4;
  grow(&s4);
  printf("%d\n",ps->n_age);
  printf("%s\n",sa.m_name);
  printf("%d\n",ps->birthday.year);
  show(&s4);
  STU *pt=&sa;
  show(&sa);
}

 

posted @ 2017-09-04 20:19  gd_沐辰  阅读(165)  评论(0编辑  收藏  举报