这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 软件与操作系统 » 【一点一滴学嵌入式Linux】结构体、联合体和枚举

共21条 1/3 1 2 3 跳转至

【一点一滴学嵌入式Linux】结构体、联合体和枚举

专家
2013-08-19 21:15:37     打赏

结构体:
  1.含义:
    是一组具有某种关联的,但是数据类型不一致的一个集合
  2:如何定义结构体
    格式:
   常规定义方式:
     struct StrName{
      var 1;
      var 2;
     };
  
   #define :本质是替换,前面指代后面
   #define N 30
   #define q int*
   typedef:一般用在对类型的定义,后面指代前面的类型
   typedef int int32;
   typedef unsigned int uint32;
   typedef int* p;
   int32 a,b,sum;
   int a,b,sum;  等价的
   p k,r;//定义两个指针变量
   q m,n;
   (int *) k,r;
   int * m,n;
   
   替换定义方式(偷懒)
   typedef struct Person{
    int age;
    char gender;
    float high;
   }person;
   
   无结构体名定义方式
   struct{
    int age;
    char gender;
   }s1,s2,s3;
   
  缺点,无法再一次定义变量,不建议大家使用
    
  3.如何定义结构体变量
   a.struct Person{
      var 1;
      var 2;
    };
    定义:struct Person + 变量名
       struct Person s1,s2,s3;


   typedef struct Person{
     int age;
     char gender;
     float high;
   }person;
   
   person d1,d2,d3;建议使用这种方式
    
   b.struct Person{ 
     var 1;
     var 2;
   }s1,s2,s3;
   
   错误点:经常忽略(;)
  
  4.如何初始化结构体成员
    typedef struct Person{
     char name[20];
     int age;
     char gender;
    }person;
    char name[20]={};
    char name[20]="hello";
    方式一:peson s1={"furong",18,'W'}; //初始化
    
    方式二:person s2;                   //赋值
    s2.name="xizong";//error
    
    strcpy(s2.name,"xizong");
    s2.age=18;
    s2.gender='M';
        
  5.如何引用结构体成员
    typedef struct Person{
     char name[20];
     int age;
     char gender;
    }person;
   结构体变量名+(.)+成员名  
    person s1;
    s1.name
    s1.age
    s1.gender
    
  练习:定义一个结构体名字叫做Class,成员自给,并且附上初值,打印
    
  6.结构体长度
   结构体的不齐
    在32bit的系统中,结构体成员默认按照4字节不齐,但是如果最大字节数低于4个字节,按照最大
    字节数补齐
  7.结构体数组
    定义结构体数组
    typedef struct Person{
     char name[20];
     int age;
     char gender;
    }person;
    
    person a[3]={{"zhangsan",20,'M'},{"mazi",29,'W'},{"wangwu",88,'W'}};//初始化
    
    a[0].name="furong";//error
    a[1].name="guoer";//error
    a[2].name="xiaolongnv";//error
    
    strcpy(a[0].name,"guoer");
    a[0].age=30;
    a[0].gender='M';
    
    
  8.结构体指针/结构体指针分配空间
     typedef struct Person{
     char name[20];
     int age;
     char gender;
    }person;
    
    
    自动分配空间
    person s;
    person *p1=&s;
    
    手动分配空间
    person *q=malloc(28);
    person *q=malloc(sizeof(person));
  如何引用结构体成员
    q->name
    变量名+(->)+成员名
    
   假如在结构体内部定义指针,那么一定要给这个指针分配一定的空间,最后也要手动销毁
   给字符串指针赋值时建议采用strcpy()函数
   
   如果定义了结构体指针,将指针向下偏移一个单位(p+1),那么它的地址偏移了整个结构体的
   长度,到了结构体的末尾
  9.结构体作为参数/返回值
   建议大家使用结构体指针作为参数和返回值
  10.结构体嵌套
     结构体内部还可以定义结构体
   typedef struct Person{
     char name[20];
     int age;
     struct Class{
      char gender;
      float grade;
     }s1;
   }person;
   
   
  11.联合体union
    不同的数据使用相同的内存空间,使用时注意,一次只能使用一个成员,便于节省空间
     union unionName{
       var 1;
       var 2;
     };
     typedef union Stu{
       var 1; 
       var 2; 2
     }stu;
     
     stu s1;
     
     在union嵌套于结构体中算结构体长度时,只算union成员中类型较大的一个类型
     警告:如果同时使用,后果不堪设想!
     
     
 12.枚举enum
    定义方式
    enum enumName{
     monday,tuesday,wednesday,thursday,friday,saturday,sunday
    };
    
    枚举中的成员,默认从0开始一次递增
    我们可以认为的改变成员的值

 

小结:结构体、联合体以及枚举这部分内容主要熟练结构体的使用,结构体是链表的基础。对于联合体与枚举,只需了解它们的特点及用法即可




关键词: 嵌入式     Linux     联合体     枚举     结构体    

院士
2013-08-19 21:36:48     打赏
2楼

哎呦~~~~


助工
2013-08-26 00:33:15     打赏
3楼
谢谢楼主

助工
2013-08-28 06:41:01     打赏
4楼
谢谢分享,再次学习

助工
2013-09-04 13:10:44     打赏
5楼
谢谢楼主了,继续学习

助工
2013-09-06 00:55:22     打赏
6楼
谢谢楼主,请继续更新

助工
2013-09-07 00:27:41     打赏
7楼
继续学习,谢谢

助工
2013-09-08 01:13:02     打赏
8楼
继续等待,谢谢

助工
2013-09-09 00:49:06     打赏
9楼
谢谢,一定好好学习

专家
2013-09-09 17:11:42     打赏
10楼

这个是干货!!!!!


共21条 1/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]