C-结构体、枚举

#include <stdio.h>

//结构体:可以由多个不同类型的数据构成
int main()
{
    struct Person
    {   //里面的3个变量,可以称为是结构体的成员或者属性
        int age;
        double height;
        char *name;
    };
    
    struct Person p = {201.55"jack"};//根据结构体类型,定义结构体变量,,,,且只能在定义结构体变量的同时对成员进行依次赋值。
    p.age = 30;
    p.name = "rose";
    
    return 0;
}
#include <stdio.h>

int main()
{   //1.定义结构体类型(并不会分配存储空间)
    struct Date
    {
        int year;
        int month;
        int day;
    };
    
    //2.定义结构体变量(真正分配存储空间)
    struct Date d1 = {2011, 4, 10};
    struct Date d2 = {2011, 8, 9};
    //会将d1 所有成员的值对应地赋值给d2的所有成员
    d2 = d1;
    
    return 0;
}

从小到大,从上往下

#include <stdio.h>
int main()
{
    struct Student
    {
        int age;
        char *name;
    }
    
    struct Student stu;
    stu.age = 20;
    stu.name = "jack";
    
    int s = sizeof(stu);
    printf("%d\n", s);
    
    return 0;
}
//输出为:16
//补齐算法, 结构体所占内存空间,一定为最大成员所占存储空间的倍数,

变量的多种定义方式:

  

#include <stdio.h>
int main()
{   /*方式一:
     //1.类型
     struct Student
     {
     int age;
     double height;
     char *name;
     };
     //2.变量
     struct Student stu = {20, 1.78, "jack"};
     */
    //方式二
    struct Student
    {
        int age;
        double height;
        char *name;
    } stu;//等同于方式一      //包括两个部分 1,定义结构体类型  2,利用新定义好的类型来定义结构体变量      //即定义类型的同时定义变量
    struct Student stu2;//再次使用S他人的n天
    //方式三
    struct {
        int age;
        char *name;
    } stu;//缺点:不能重用
    
    return 0;
}

 

总结: 定义结构体变量的3种方式

    1,先定义类型再定义变量

        struct Student   {  int age;  };  

        struct Student stu;

    2, 定义类型的同时定义变量

        struct Student  {  int age;  } stu;  struct Student stu2;

    3, 定义类型的同时定义变量(省略类型名称)

        struct  {  int age;  } stu;

 

 

//指向结构体的指针
int main()
{
    struct Student
    {
        int no;
        int age;
    };
    
    struct Student stu = {1, 20};
    
    struct Student *p;//指针变量p将来指向struct Student类型的数据
    p = &stu;//指针变量p指向了stu变量
    
    
    //第一种
    printf("age= %d, no=%d\n", stu.age, stu.no);

    //第二种
    printf("age= %d, no=%d\n", (*p).age, (*p).no);//访问stu的存储空间里的no
    
    //第三种
    printf("age=%d, no=%d\n", p->age, p->no);
}

总结:

1, struct Student *p;

2, 利用指针访问结构体成员

 1》 (*P).成员名称

 2》 p->成员名称 

        

//结构体的嵌套
int main()
{
    struct Date
    {
        int year;
        int month;
        int day;
    }
    
    struct Student
    {
        int no;
        //int year;
        //int month;
        //int day;
        
        struct Date birthday;
        struct Date ruxueDate;
    }
    struct Student stu = {1, {2000, 9, 10}, {2012, 9, 12}};
    return 0
}

枚举

 

//枚举
int main()
{
    //定义枚举类型
    enum Season
    {
        spring,//0 也可以自定义为1
        summer,//1
        autumn,//2
        winter//3
    };
    //2,定义枚举变量
    enum Season s = summer
    return 0;
}

数据类型总结----------------------------------

基本数据类型

int

  long int 、 long  8 %ld

  short int 、 short  2 %d %i

  unsigned int、 unsigned  4 %zd

  signed int、 signed、 int  4 %d %i

float/double

  floar 4 %f

  double 8 %f

char 1 %c %d

char类型保存在内存中的是它的ASCII值

二构造类型

1,数组

  只能由同一种类型的数据组成、

2,结构体

  可以由不同类型的数据组成

三、指针类型

  间接操作变量的值

  

 

posted @ 2015-11-01 19:51  yhidr  阅读(159)  评论(0编辑  收藏  举报