张国伟 发表于 2024-8-10 15:36:28

C语言---结构体

目录
1. 结构体
1.1 结构体初始化
1.2 结构体变量的引用
1.3 结构体范例的巨细
2. qsort()
3. 共用体
4. 枚举
5. typedef

1. 结构体

语法:
struct 结构体名
{
   成员列表;
} ;
(1)struct 关键字 --- 表现是在构造一个结构体的范例
(2)结构体名 --- 用来描述结构体这个范例的一个名称
(3)成员列表 --- 表现要描述的复杂数据中用到的具体的成员变量,多个成员变量之间用分号隔开
(4)末了有一个分号 表现结束
eg:
struct student
{
    char name;
        int sno;
        float score;
        char sex;
};                     //表示 定义出 一个 数据类型 留意:
  1.结构体范例的利用的过程 
    a.先定义出范例
    b.定义变量

  2.定义变量 
  struct 结构体名  变量名;
1.1 结构体初始化

struct student s = { };
  (1)看每个成员变量,具体是什么数据范例。
  (2)根据 各个成员变量 自身的数据范例,进行初始化。
  (3)初始化的次序,按照定义的次序,依次初始化
eg:
struct student s = {"tom",1515,89.6,"man"}; 1.2 结构体变量的引用

结构体数据 引用时,一样平常是引用到具体的成员数据 ,引用到成员 
运算符 为:.          //结构体成员运算符     
利用:
   结构体变量名.成员名    //表现 访问 某个结构体 的成员 
s.name     
结构体范例的定义情势:
情势1: 先定义范例,然后定义变量 
struct demo
{
}; 
struct demo d;
情势2: 定义范例的同时,定义变量 
struct demo
{
}d; 
情势3: 定义范例的同时,定义变量,可以省略 结构体名  
struct 
{
}d;                                                          //假如,结构体范例只用一次 
 
1.3 结构体范例的巨细

(1)在32位的平台上,默认都是按4字节对齐的。 
(2)对于成员变量,
   各自在自己的自然边界上对齐。
   char  -- 1字节 
   short -- 2字节 
   int   -- 4字节 
(3)假如 成员变量中有比4字节大。      
  此时 整个结构体 按照4字节对齐。           //32位的平台 
(4)假如 成员变量中没有有比4字节大。  
  此时 整个结构体 按照最大的谁人成员对齐。   //32位的平台   
假如有超过4字节 ,按照4字节对齐
假如没有超过4字节的,则按成员变量中最大对齐 

(5)64位的平台:假如超过4字节的,按超过的最大的成员变量对齐 ,假如没有超过4字节的,则按成员变量中最大对齐
同范例的结构体变量之间,可以相互赋值:
struct student s1;
struct student s2;
s2 = s1; 
2. qsort()

void qsort(void *base,    //要排序的数组的首地址 
                size_t nmemb,  //数组元素的个数 
                size_t size,   //单个元素的巨细
                int (*compar)(const void *, const void *)     //比较函数 --- 提供比较依据
#include<stdio.h>
#include<stdlib.h>

int compare (const void *a,const void *b)      // 回调函数
{
    const int *p = a;
    const int *q = b;
    return *p - *q;
}

int main(void)
{
    int a[] = {2,3,1,7,9,0,5,4,6,8};

    qsort(a,10,sizeof(int),compare);

    int i = 0;
    for(i = 0;i < 10;++i)
    {
      printf("%d ",a);
    }
    putchar('\n');
} 3. 共用体

union 语法: 
  union 共用体名
  {
     成员变量;
  };

union demo
{
   char a;
       short b;
       int c;
};

union demo d = {1};      // 初始化 共用了一块内存空间 共用了最大成员的空间 (内存空间就是最大成员谁人空间内存巨细)
留意:
(1)共用体初始化时,只能给一个值,默认时给到第一个成员的。
(2)共用体变量中的值,取决与末了一次给到的值,还要看能影响几个字节。
考点:用共用体判断巨细端
#include<stdio.h>

union demo
{
    unsigned char a;
    unsigned short b;
    unsigned int c;
};

int isLittleEnidian(void)
{
    union
    {
      int a;
      char b;
    }d = {1};
    return d.b;   // 如果返回1,就是小端模式
}

int main(void)
{
    union demo d;

    printf("%d\n",isLittleEnidian());

    return 0;
} 4. 枚举

枚举:是指将变量的值一个一个枚举出来,变量的值只限于枚举出的值的范围
作用:
(1)为了提高代码可读性
(2)提高代码的安全性
enum 枚举名
{
    列举各种值,      // 值之间用 , 逗号隔开
};                     // 表示定义了一种枚举类型


enum 枚举名 变量名;
注:枚举中逐个枚举的值默认是从0开始,枚举范例的本质实际上是一个int范例的数据,
枚举范例的变量与整型范例的变量是通用的。
假如有给定的值,后续没有给值的枚举成员,依次+1.
eg:
enum fire
{
    Fire little,      // 0
    Fire middle,
    Fire lage
};



enum fire
{
    Fire little = 1,      // 1
    Fire middle,            // 2
    Fire lage            // 3
};



与宏定义对比:利用阶段不一样  --- 宏定义 ---- 预处理阶段; 枚举 --- 编译阶段 要检查语法,运行阶段要到场代码运行;枚举更能阐明有相关性的一些值之间关系。
5. typedef

不是定义范例,而是给范例起别名,
int a;
typedef int a;   // 此时a是一个int类型的一个别名


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: C语言---结构体