黑马程序员-ios学习笔记 c语言 结构体

  1. ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

  构造类型定义: 由一个或者多个已定义类型的元素用构造的方法,构造新的类型

  构造类型分类: 数组   结构体

  结构体:   由相同类型或者不同类型的数据用构造方法,构造的类型 

    一、结构体的定义: struct 结构体名{

                                            成员列表;

                                            }; //注意此处的分号不能省

             例:定义一个老师的结构体

struct teacher{
        char *name;
        char sex;
        int age;
        int height;
        int weight;
        int seniority;
    };

     1、结构体变量定义的三种方法

       1)先定义结构体,然后在定义结构体变量

例:

struct teacher{    //定义一个老师的结构体
        char *name;    //定义名字
        char sex;      //定义性别
        int age;       //定义年龄
        int height;    //定义身高
        int weight;    //定义体重
        int seniority; //定义教龄
    };
    struct teacher tea; //定义结构体后,再定义结构体变量

      注意: (1)结构体定义完成以后,计算机并不会给结构体分配内存空间

                  (2)会在定义结构体变量后,分配存储空间  

            结构体变量定义格式:struct 结构体名 结构体变量名;

            struct Student stu1,stu2,stu3;  //定义多个结构体变量 

        2)定义结构体的同时,定义结构体变量

              格式:struct 结构体名{


                               }结构体变量1,结构体变量2....;

例:

struct teacher{
    char *name;
    char *sex;
    int age;
    int height;
    int weight;
    int seniority;
 }tea1,tea2,tea3; //同时定义了三个结构体变量,分别为tea1,tea2,tea3

        3)使用匿名结构体定义结构体变量

                struct {

 

                  }结构体变量1,结构体变量2....;

例:

struct{    //匿名结构体
    char *name;
    char *sex;
    int age;
    int height;
    int weight;
    int seniority;
 }tea1,tea2,tea3; 

         4)用结构体类型,定义结构体变量

             struct Car car1;

2、获取结构体变量中的成员

            tea.name    //获取老师的名字

3、结构体变量的初始化

 1)先定义结构体变量,然后再初始化

struct teacher{    //定义一个老师的结构体
        char *name;    //定义名字
        char sex;      //定义性别
        int age;       //定义年龄
        int height;    //定义身高
        int weight;    //定义体重
        int seniority; //定义教龄
    };
    struct teacher tea; //定义结构体变量
    //结构体变量初始化
    tea.name="王兰";
    tea.sex='F';
    tea.age=26;
    tea.height=160;
    tea.weight=90;
    tea.seniority=3;

 2)定义结构体变量的同时,进行初始化

struct teacher tea={"丽丽",'F',28,158,95,3};  //定义结构体变量同时进行初始化

3)定义结构体的同时,还可以指定元素的初始化

      struct teacher={.name = "磊磊"};

4、结构体变量占用存储空间大小

    计算结构体变量在内存中占用的字节数的方法

    1)先找对齐模数

       对齐模数 :是结构体中的基本数据类型中占用字节数最大的那个

   2)在计算结构体变量的中各个成员占用的字节和

  printf("结构体变量tea在内存中占用的字节数:%ld",sizeof(tea));

5、结构体作用域:全局、局部

#include <stdio.h>
struct tree{      //全局结构体
    char *name;
    int age;
}tr;
int main(int argc,const char *argv[]){
    struct tree tr={"杨树",8};
    printf("%s\t%d\n",tr.name,tr.age);
    printf("%s\t%d\n",tre.name,tre.age); //错误的
    struct tree{      //局部结构体
        char *name;
        int age;
    };
    struct tree tre={"白果树",10};
    printf("%s\t%d\n",tre.name,tre.age);

二、结构体数组:  用来存放大量的结构体相同的结构体变量

   1、 结构体数组定义: 

           1)定义结构体的同时,定义数组

struct teacher{    //定义一个老师的结构体
        char *name;    //定义名字
        char sex;      //定义性别
        int age;       //定义年龄
        int height;    //定义身高
        int weight;    //定义体重
        int seniority; //定义教龄
    }tea[3];//定义结构体同时定义数组

        2)先定义结构体,后定义数组

              struct teacher tea[3];

2、结构数组的初始化和遍历

1)结构体数组的初始化方法

     1、定义结构体数组的时候,进行初始化   

           struct person{

                char name[5];

                int age;

            }per[2]={{"媚媚",18},{"小明",8},{"沙沙",20}};

      2、定义的同时进行初始化

          struct teacher tea[3]={ {"丽丽",'F',28,158,95,3},{"李云飞",'M',30,175,180,5},{"郑秀",'F',23,162,100,1}};

      3、先定义后初始化,整体赋值

          struct teacher a[2];
          a[0]=(struct teacher){"小强",'M',23,177,160};
          a[1]=(struct teacher){"小刚",'M',25,173,170};

      4、先定义结构体数组,后初始化

           struct teacher tea[2];

           tea[0].name = "明明";

           tea[0].age = 30;

 2)结构数组的遍历

struct teacher tea[3]={
        {"丽丽",'F',28,158,95,3},
        {"李云飞",'M',30,175,180,5},
        {"郑秀",'F',23,162,100,1}
       };
    for (int i=0; i<3; i++) {
        printf("老师的姓名:%s\n性别:%c\n年龄:%d\n身高:%d\n体重:%d\n教龄:%d\n",tea[i].name,tea[i].sex,tea[i].age,tea[i].height,tea[i].weight,tea[i].seniority);  //获取结构体数组变量值并输出

  1. ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值