天天看点

黑马程序员——C语言基础——结构体

  ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

      结构体属于构造类型      结构体由多个不同类型组合成      数组由多个相同类型的数据构成      结构体类型作用域:从定义类型的那一行开始,一直熬代码块结束      结构体类型是本身是不存在的需要手动创建 1,定义结构体类型      定义结构体时并不会分配存储空间

struct Person
        {
             int age;
             double height;
             char *name;
         } 
           

2, 根据结构体类型定义结构体变量

struct Person p = {20,1.55,"jack"};
           

只能在定义结构体变量时一次性赋值或者使用p.age的方式赋值 这将20赋值给age,1.55赋值给height,jack赋值给name  或者使用变量名称.属性的方法赋值

p.age = 30;//将30赋值给age
p.name = "jack";//将'jack'赋值给name
p.height = 1.55;//将1.55赋值给height
           

注意点:

结构体的名称最好有意义; 如果有两个结构体变量p1,p2;  如果执行p1 = p2;会将p2的所有成员的值对应的赋值给p1的所有成员

补齐算法:结构体所占用的存储空间,必须是最大成员字节数的倍数

结构体的其他用法: 定义类型同时定义结构体变量

struct Person
        {//定义Person的三个属性
            int age;
            double height;
            char *name;
         } p1;
           

         注意:结构体类型不能重复定义

结构体数组: 结构体数组的初始化和数组的初始化一样,如果想改变数组里的内容不能直接用:

例如:

struct Record{   
    int no;   
    charchar *name;  
    int score;   
};   
 struct Record rank[3]=  
{  
     {1,"jake",500},  
     {2,"rose",300},  
     {3,"jim",100}  
};  
           

错误写法:

rank[0] = {4,"whb",900};  
  
//正确写法  
rank[0] .no=4;  
rank[0] .name="whb";  
rank[0] .sroce=900;
           

结构体指针:      1,指向结构体的指针的定义      2,利用指针访问结构体的成员            例如:

int main()
{
struct Student
{
     int no;
     int age;
 }
 //结构体变量
 struct Student stu = {1,20};
//指针变量p将来只想struct Student类型的数据
struct Student *p;
//指针变量p指向了stu变量
p = &stu;
有三种方式可以访问stu里面存储的数据
//第一种方式
printf("age = %d,no = %d\n",stu.age,stu.no);
//第二种方式
printf("age = %d,no = %d\n",(*p).age,(*p).no);
//第三种方式
printf("age = %d,no = %d\n",p -> age , p ->no);
           

结构体的嵌套: 概念:在结构体中调用结构体 注意:结构体的嵌套不能自己包含自己

例如:

int main()
     {
          struct Date //定义结构体Date
          {
               int year;
               int month;
               int day;
          }
          struct Student//定义结构体Student
          {
               int no;
               
               struct Date birtDay;
               struct Date rDay;
          }
          struct Student p = {1,{2000,9,10},{2012,9,10}};
          printf("year = %d,month=%d,day= %d\n",stu.birtDay.year,stu.birtDay.month,stu.birtDay.day);
          return 0;
     }
           

继续阅读