结构体

什么是结构体?结构体是用户根据实际需要自己定义的复合数据类型。结构体的出现是为了表示一些复杂的数据,而普通的数据类型无法满足要求。

结构体的定义:

struct Student //struct Student为一个复合数据类型,结构体名字为Student,含有三个成员sno,name,age
{ int sno;char name[20];int age;
};//分号不能省

实例说明1:

#include<stdio.h>
#include<string.h>
struct Student{int sno;char name[20];int age;
};//分号不能省
int main()
{struct Student st,*pst;    pst=&st;/*第一种方式:结构体变量.成员*/st.sno=99;strcpy(st.name,"李四");//这里的strcpy(st.name,"李四")是string类型的赋值st.age=21;printf("%d,%s,%d\n",st.sno,st.name,st.age);/*第二种方式:pst指向结构体变量中的sno成员,推荐使用*/pst->sno=100;//pst->sno等价于(*pst).snostrcpy(pst->name,"王五");pst->age=30;printf("%d,%s,%d\n",pst->sno,pst->name,pst->age);  return 0;
}

实例说明2(通过指针传参(在普通变量的数据类型大于4个字节时)可以节省内存和时间,还可以修改成员变量的值):

#include<stdio.h>
#include<string.h>
struct Student{int sno;char name[20];int age;
};
void input(struct Student *pst);//前置声明
void output(struct Student *pst);
int main()
{struct Student st;//定义结构体变量st,同时为st分配内存(此时st占28个字节) input(&st);output(&st);return 0;
}
void output(struct Student *pst)//完成输出
{printf("%d  %s  %d\n",pst->sno,pst->name,pst->age);
}
void input(struct Student *pst)//完成输入
{(*pst).sno=100;strcpy(pst->name,"张三");pst->age=21;
}

注意:

1.结构体在定义时并没有分配内存(它只是一个模型),而是在定义结构体变量时分配内存。

2.结构体变量(如上面的st)不能进行四则运算,但可以相互赋值。

动态内存的分配和释放

使用了malloc()函数的都可以称为动态分配内存。malloc()带一个整型参数

如:int *pArr=(int *)malloc(sizeof(int)*5);

说明:其中的malloc函数只能返回第一个字节的地址(无实际意义),所以要就行强制类型转换,这里加(int *);

动态内存的释放:free(pArr);

说明:把pArr所代表的动态分配的20个字节的内存释放(局部变量在函数内执行完就释放了),跨函数使用内存只能通过动态分配内存来实现。

实例说明(跨函数使用内存):

#include<stdio.h>
#include<malloc.h>
struct Student
{int sno;int age;
};
struct Student* CreateStudent(void);//void表示该方法不加形参,可不写
void ShowStudent(struct Student *);
int main()
{struct Student *ps;  ps=CreateStudent();ShowStudent(ps);//将ps赋给pstfree(ps);return 0;
}
struct Student* CreateStudent(void)
{struct Student *p=(struct Student*)malloc(sizeof(struct Student));//为结构体指针变量p动态分配内存p->sno=1001;p->age=22;return p;//把p赋给ps,此时ps指向p所指内存地址
}
void ShowStudent(struct Student *pst)
{printf("%d %d\n",pst->sno,pst->age);//通过pst指向结构体变量ps的成员sno、age进行输出成员值
}

结构体的使用和动态内存的分配及释放相关推荐

  1. 动态内存的分配与释放

    1.new与delete运算 c++提供了两个中重要的运算符:new和delete.由于他们是运算符不是函数,因此执行效率更高. 运算符 功能 目 结合性 用法 new[] 动态分配 单目 自右向左 ...

  2. 比大小,人类智慧天花板,任意类型,任意个数。内容包含函数模板的创建,类的创建,动态内存的分配与释放,函数调用指针的用法。牵扯多个知识点。

    比大小,看这一篇就足够,大家好,我是姜姜一名热爱C++编程的大学生,接下来我将通过代码演示如何利用C++实现任意类型,任意个数的比大小,并且找出最大的数. 由于本人比较懒,所有没写注释还请各位读者多多 ...

  3. 动态内存的申请和释放

    动态内存的申请和释放 文章目录 动态内存的申请和释放 1. malloc() 和 free() 的基本概念以及基本用法 1.1 函数原型及说明: 1.2 被释放的指针 1.3 注意事项 2. mall ...

  4. C++动态内存会被自动释放吗?

    C++动态内存会被自动释放吗? 函数体内的局部变量在函数结束时自动消亡.很多人误以为示例7-6是正确的.理由是p是局部的指针变量,它消亡的时候会让它所指的动态内存一起完蛋.这是错觉! void Fun ...

  5. 动态内存的开辟与释放

    //动态内存分配 #include <stdlib.h> #include <stdio.h> #include <string.h> #include <e ...

  6. FFmpeg源代码简单分析:内存的分配和释放(av_malloc()、av_free()等)

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  7. java怎么释放分配的内存,linux 内存的分配和释放,linux分配释放

    linux 内存的分配和释放,linux分配释放 了解内存分配机制(共享映射与请求分页) 通过 pmap 命令,可以获取用户进程逻辑地址空间中映射的内存信息: pmap -x $pid 其中 -x 表 ...

  8. FFmpeg源代码简单分析-通用- 内存的分配和释放(av_malloc()、av_free()等)

    参考链接 FFmpeg源代码简单分析:内存的分配和释放(av_malloc().av_free()等)_雷霄骅的博客-CSDN博客_av_malloc 内容介绍 内存操作的常见函数位于libavuti ...

  9. c语言 static结构体,C语言实现动态结构体数组

    C语言实现动态结构体数组 祖仙教小凡仙 海鲨数据库架构师 C语言实现动态结构体数组 原因是因为以前使用C++来实现的,主要用VERCTOR C++标准库的失代器 而不是纯C:C++是C语言的超集,除了 ...

最新文章

  1. php 魔术方法 多继承,day23:单继承多继承菱形继承__init__魔术方法
  2. 纯js制作的弹球游戏
  3. 使用USMT备份和还原用户数据
  4. bzoj2751 [HAOI2012]容易题 数学
  5. Java并发编程-ConcurrentHashMap
  6. IOS开发学习笔记007-数据结构
  7. java:linux上找出最耗资源的线程方法
  8. win下编译TNN安卓库(静态或者动态) + android studio ndk调用
  9. catia三边倒角_CATIA课时:操作工具栏创建倒角倒圆角视频教程_翼狐网
  10. kafka 集群搭建步骤
  11. 2362:数字游戏(小k和小p的传奇)
  12. Java实现DOC文件转DOCX文件
  13. Android设置app显示指定国家语言
  14. GPRS 中的PDP上下文名词解释
  15. Meta:不用插管!AI看看脑电图就知道你在想啥
  16. 1.微服务架构-什么是微服务
  17. vivo是安卓手机吗_vivo开发者大会将于深圳召开,vivo新OS即将亮相|vivo|安卓|安卓系统|手机行业|os...
  18. CK-GL16-AB传感器|读卡器在工业自动化AGV小车磁导航RFID定位领域应用与解决方案
  19. Mathtype公式转为latex格式
  20. Ctrl+C、Ctrl+V不好使怎么办?windows系统热键占用查询

热门文章

  1. 跨域问题及解决方式(CORS)
  2. 史上争议最大的一本Java书籍,到底值不值得我们一读?
  3. 顶尖IT高手培养——大牛招徒
  4. python tkinter计算器实例_python学习——tkinter实战(计算器)
  5. TI Sitara AM57x DSP+ARM + Xilinx Artix-7 FPGA开发板 规格书资料
  6. 中国如何应对非传统网络安全风险?
  7. 大中型电子计算机房装修材料价格,大型计算机机房装修方案以及材料清单.doc...
  8. 借指挥监控中心大屏,告诉你什么是真正的大数据可视化
  9. 指南-AT应用指南-AT指令指南-专网卡配置流程
  10. c# 实现网页加载后将页面截取为长图片