NDK启航篇——C语言基础(结构体)

今天来写一下结构体

什么是结构体?

  • 结构体是一种构造数据类型把不同的数据类型整合起来成为一个自定义的数据类型
  • 与Java中的类相似
  • 是C中最复杂的数据类型

结构体的初始化方式

  • ①声明的同时进行赋值
  • ②先声明,声明之后赋值
//尖括号代表系统类库,std表示标准,io表示输入输出 引入标准输入输出  #include<stdio.h>  //lib表示类库 引入标准类库  #include<stdlib.h>    struct Man{    char* name;    int age;    int (*func)();  };  void main(){    //初始化结构体的变量  //①声明的同时进行赋值    struct Man m = {"TOM",21};  //②先声明    struct Man m1 ;  //声明之后赋值    m1.age = 20;    m1.name = "JERRY";    printf("%s,%dn",m1.name,m1.age);    getchar();  }

结构体的写法

  • struct 名字 { ··· };
  • struct 名字 { ··· }m1,m2("TOM",10);//结构体变量名
  • struct 名字 { ··· }名字; //取别名 typedef int Age;
  • 匿名结构体作用:控制结构体变量的个数,相当于单例
 struct{    char name[10];    int age;  }m1,m2;
  • 结构体嵌套
struct Teacher{    char name [10];  };  struct Student{    char name [20];    int age;    struct Teacher t;  };  void main(){    struct Student s = {"TOM",10,{"JERRY"}};    struct Student s1;    s1.age = 10;    strcpy(s1.t.name,"JERRY");    getchar();  };

什么是结构体指针

  • 结构体指针就是指向结构体地址的指针
struct Man {    char name[20];    int age;  };  void main (){   struct Man m1 = {"TOM",10};   struct Man *p = &m1;   printf("%s,%dn",m1.name ,m1.age);   printf("%s,%dn",(*p).name ,(*p).age);  //"->"是"(*p)."的简写   printf("%s,%dn",p -> name ,p -> age);   getchar();  };

什么是结构体指针数组

  • 结构体指针就是指向结构体地址的指针
struct Man {    char name[20];    int age;  };  void main (){   struct Man mans[] = {("TOM",10),("TOM",10)};    //遍历数组①    struct Man *p = mans;    for(;p<names +2;p++){     printf("%s,%dn",p -> name ,p -> age);  }  ②   int i = 0;   for(;i<2;i++){    printf("%s%dn",mans[i].name,mans[i].age);  }   struct Man *p = &m1;   printf("%s,%dn",m1.name ,m1.age);   printf("%s,%dn",(*p).name ,(*p).age);  //"->"是"(*p)."的简写   printf("%s,%dn",p -> name ,p -> age);   getchar();  };

结构体大小(字节对齐)

  • 结构体变量的大小按最大的分配必须是最宽基本数据类型的整数倍
  • 提升读取效率
struct Man{    int age;    double weight;  };  void main(){    struct Man m1 = {10,20.1};    printf("%d,%#xn",sizeof(m1),&m1);    getchar();  }

结构体的知识点有点多但其实并不难,今天就先写到这里明天进续写结构体剩下的东西,欲速则不达,慢慢来不着急。