结构体的使用和动态内存的分配及释放
来源:互联网 发布:水利学什么软件 编辑:程序博客网 时间:2024/06/05 20:02
结构体
什么是结构体?结构体是用户根据实际需要自己定义的复合数据类型。结构体的出现是为了表示一些复杂的数据,而普通的数据类型无法满足要求。
结构体的定义:
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赋给pstreturn 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进行输出成员值}
- 结构体的使用和动态内存的分配及释放
- 数据结构预备知识之指针,结构体和动态内存的分配与释放
- 关于动态内存的分配和释放
- 动态内存的分配和释放
- **的内存分配及释放
- C和C++动态内存分配和释放的区别
- C和C++动态内存分配和释放的区别
- C和C++动态内存分配和释放的区别
- C和C++动态内存分配和释放的区别
- C和C++动态内存分配和释放的区别
- C和C++动态内存分配和释放的区别
- 二维数组的动态内存分配和释放
- C/C++动态二维数组的内存分配和释放 .
- C/C++动态二维数组的内存分配和释放
- C++动态二维数组内存的分配和释放 opencv
- 动态内存分配和释放
- 动态内存分配和释放
- 关于C++中结构体及其指针成员的内存分配和释放
- 腾讯微博客户端开发---若水(第七集、第八集,第九集)
- 解决Android Studio中调试总出现waiting for adb问题
- Tiled convolutional neural networks(TCNN)
- 支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现(转载)
- 倍压整流电路原理及仿真
- 结构体的使用和动态内存的分配及释放
- C++中的空类,默认产生哪些类成员函数
- [设计模式-创建型]工厂方法(Factory Method)
- BZOJ 1191 [HNOI2006] 超级英雄 Hero 题解与分析
- memmove函数
- Java笔记(例1:蛇形填数) 边走边聊
- 辛苦的 20130714 public change
- 【Android小范例教程】【3】图片搜索器
- 面试时被问到的技术方面的问题