欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > C语言---结构体

C语言---结构体

2025/4/18 18:18:50 来源:https://blog.csdn.net/qq_70030717/article/details/141069455  浏览:    关键词: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[30]; 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[i]);}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,        // 0Fire middle,Fire lage
};enum fire
{Fire little = 1,        // 1Fire middle,            // 2Fire lage              // 3
};

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

5. typedef

不是定义类型,而是给类型起别名,

int a;
typedef int a;   // 此时a是一个int类型的一个别名

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词