typedef,结构体,共用体,联合体

简介: typedef的用途: 封装数据类型,方便移植 简化函数指针的定义 结构体:不同类的型元素汇聚。 (1)、在声明类型的同时定义变量: struct结构体名{   成员列表 }变量名列表;   (2)、直接定义结构体类型变量 struct {     成员列表 }变量名表列;  

typedef的用途:

  1. 封装数据类型,方便移植

  2. 简化函数指针的定义

结构体:不同类的型元素汇聚。

1)、在声明类型的同时定义变量:

struct结构体名{

  成员列表

}变量名列表;

 

2)、直接定义结构体类型变量

struct

{

    成员列表

}变量名表列;

 

指向结构体变量的指针

定义形式:struct结构体名 *结构体指针名;

例如:struct student *p;

#define_CRT_SECURE_NO_WARNINGS  //去掉安全检查

#include<stdio.h>

#include<stdlib.h>       

 

structmydata

{

   intnum;

   charstr[100];

};

 

voidmain()

{

   //int a;

   //int *p;

   //struct mydata *p;

   //printf("%d", sizeof(p));

 

   structmydatamd;  //实例化结构体

   md.num = 99;

   sprintf(md.str,"gogogo");

   printf("md.num=%d,md.str=%s",md.num,md.str);  //打印数据

 

   structmydata *p;  //p存储地址 struct mydata决定了大小还有如何解析

   printf("\n%d",sizeof(p));

 

   p = &md;//结构体指针初始化,存储地址

   printf("\n(*p).num=%d,(*p).str = %s", (*p).num, (*p).str);

   printf("\np->num = %d,p->str=%s",p->num,p->str);

 

   //指针访问结构体,第一种方式(*p.成员变量,第二种p->成员变量

 

   getchar();

}

 

结构体变量:

简单案例:

结构体成员地址从低到高连续分配,首成员对应低地址。

 

公用/联合体(union:使用不同类型的变量共占用一段内存(相互覆盖),次共用体大小为元素中最大字节变量。

 

共用体成员索引:可以通过.成员变量符,也可以通过   à指针索引。        

     

union案例

 

枚举变量:



动态内存申请:
  1. 在内存中申请的。

    malloc()返回的类型是:void *类型的

      2malloc之后要记着释放,使用free函数。否则会造成内存泄露,导致其它程序不能再使用这块儿内存了。

操作系统在管理malloc的时候是一下这种方式:

//     |     地址        |

//     |     大小        |         

调用malloc的时候,系统每次都会为malloc创建一个节点,并记录本次malloc的首地址和malloc的大小。

 

malloc内存里面申请出来的值是什么值?

gcc这个编译器下,malloc默认把申请的内存中的初始值变成0,但是在不同的编译器下回有所不同。

 

如果想将malloc中申请的内存的值变成0,可以使用memset(p,0x0,100);如果想使用这个函数,要加上头文件<string.h>

 

calloc()

realloc:当内存不够了时候,可以通过realloc继续申请内存空间。

realloc的实现策略:

  1. malloc后面有足够的存储空间。这时候相当于把malloc的首地址不变,只是把malloc的大小改大些。

  2. 如果malloc后面的存储空间不够,那么这时候realloc新开辟一个地址空间,然后将原来malloc的内存里的内存复制到新开辟的内存空间中。

目录
相关文章
|
监控 数据挖掘 BI
ERP系统中的成本管理与生产成本核算解析
【7月更文挑战第25天】 ERP系统中的成本管理与生产成本核算解析
1320 3
|
4天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
288 116
|
19天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
6天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
408 38
Meta SAM3开源:让图像分割,听懂你的话
|
13天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
670 220
|
1天前
|
Windows
dll错误修复 ,可指定下载dll,regsvr32等
dll错误修复 ,可指定下载dll,regsvr32等
132 95
|
11天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1663 158