C语言学习:结构体(笔记)

转载地址:https://blog.csdn.net/u014455929/article/details/52552365

1、结构体类型的定义和变量的定义
  • 结构体是一种构造数据类型 
    (构造数据类型:数组类型、结构体类型(struct)、共用体类型(union))

用途:把不同类型的数据组合成一个整体,类似Java中的类,但不同的是,C语言的构造体中木有函数(即Java中的方法)———自定义数据类型 
1.1 定义一个结构体类型的一般形式

struct [结构体名]//struct是关键字,
不能省略;结构体名为合法标识符。
{
    类型标识符  成员名;//成员类型可以是基本型或构造型
    类型标识符  成员名;
    ············
};//注意不要忘记这里的 ;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

1.2 定义结构体类型变量的3种方法 
1.2.1 先定义结构体类型,再定义变量名

struct student
        { 
         int num;
         char  name[20];
         char sex;
         int age;
         float score;
         char addr[30];
        }; 
        struct student   stu1,stu2;     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

1.2.2 定义结构体类型同时定义结构体类型变量:

struct student
        { 
         int num;
         char  name[20];
         char sex;
         int age;
         float score;
         char addr[30];
        }stu1,stu2;    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

1.2.3 直接定义结构体类型变量:

struct 
        { 
         int num;
         char  name[20];
         char sex;
         int age;
         float score;
         char addr[30];
        }stu1,stu2;    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

说明: 
结构体类型与结构体变量概念不同 
类型:不分配内存; 变量:分配内存 
类型:不能赋值、存取、运算; 变量:可以 
结构体可嵌套 
结构体成员名与程序中变量名可相同,不会混淆 
例:

例 struct  date
    {    int month;
          int day;
          int year;
    };
   struct  student
  {   int  num;
       char name[20];
       struct  date  birthday;
  }stu;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

1.3 结构体变量的初始化 
一般格式 
结构体类型 结构体变量名={初始值表 };

方法一:

struct student
{ char name[10];
   int age;
   float score[5],ave;
}stu={“zhangsan”,20,78,92,83,75,69};
  • 1
  • 2
  • 3
  • 4
  • 5

方法二:

2struct student
{ char name[10];
   int age;
   float score[5],ave;
};
struct student 
stu={“zhangsan”,20,78,92,83,75,69};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

1.4 结构体变量的引用 
1.4.1对结构体类型数据的整体引用 
赋值运算 
ANSI C允许两个相同结构的结构体变量直接赋值 
例:

struct student li,zhang={"zhangsan",20,78,92,83,75,69}; 
      li=zhang; //将zhang对象拷贝一份赋值给li
      /*
      但li={ “li si”,19,76,56,90,69,80};是非法的
   */
  • 1
  • 2
  • 3
  • 4
  • 5

1.4.2 求结构体类型数据的字节数

sizeof(变量名或类型名);
  • 1

1.4.3 结构体类型数据成员的引用 
引用规则:结构体变量出同类型赋值外,不能整体引用,只能引用变量成员 
引用方式: 结构体变量名.成员变量

stu.name = "dashan";
  • 1

1.4.4 嵌套结构体中成员的引用 
结构体嵌套时,逐级引用

struct  student
  {
       int  num;
       char name[20];
       struct  date 
      {    int month;
            int day;
            int year;
      }birthday;
  }stu1,stu2;

//给出生日期的年份赋值
stu1.birthday.year = 1999;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2、结构体数组 

2.1 结构体数组的定义及初始化 
2.1.1结构体数组的定义,与定义结构体类型变量很类似,也有三种形式 
形式一:
struct  student
      {     int  num;
             char name[20];
             char sex;
             int age;
      };
struct  student stu[2];
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

形式二:

struct  student
      {     int  num;
             char name[20];
             char sex;
             int age;
      }stu[2];
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

形式三:

  struct 
      {     int  num;
             char name[20];
             char sex;
             int age;
      }stu[2];
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.1.2 结构体数组的引用 
结构体数组元素的引用

 struct  student
      {     int  num;
             char name[20];
             char sex;
             int age;
      }str[3]={{10,”zhang san”,’,M’,20}};

 str[1]=str[0];
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结构体数组元素成员的引用 
引用方式: 结构体数组名[下标].成员名

 struct  student
      {     int  num;
             char name[20];
             char sex;
             int age;
      }str[3];

stu[1].age++;
strcpy(stu[0].name,”ZhaoDa”);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3、结构体和指针 
3.1 结构体指针变量的定义 
定义形式:struct 结构体名 *结构体指针名;

struct  student  *p;
//此时指针变量*p中存放的是--结构体变量在内存的起始地址

//例:
struct  student
      {     int  num;
             char name[20];
             char sex;
             int age;
      }stu;
struct  student   *p=&stu;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3.2 结构体指针变量的引用 
使用结构体指针变量引用成员形式

(*结构体指针变量名).成员名 <=> 结构体指针变量名->成员名 <=> 结构体变量名.成员名

例:

int n;
int *p = &n;
*p = 10; <=> n = 10;
  • 1
  • 2
  • 3
struct student
    {      
    long int num;
     char name[20];
     char sex;
     float score;
    }stu1;
struct student *p = &stu1;
stu1.num=101;   <=>  (*p).num=101;  <=> p->num=101;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

猜你喜欢

转载自blog.csdn.net/whalefall/article/details/80771438