结构体与指针(使用malloc)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>//定义一个结构体,存放学生信息。然后存储于malloc的空间内#define M 20
#define N 3
#define SIZE 3typedef struct student//定义一个结构体变量,存放学生信息
{char name[M];//姓名int age;//年龄float scores[N];//成绩
}stu;//对结构体变量进行重命名int menu()//菜单
{int c = 0;printf("......请选择要进行的操作:....\n");printf("1.........................输入\n");printf("2.........................输出\n");printf("3.........求年龄最大人的首地址\n");printf("4.............根据年龄进行排序\n");printf("5.............根据姓名进行排序\n");printf("6.....根据三门成绩总和进行排序\n");printf("-1........................退出\n");scanf("%d",&c);return c;
}int SWAP(stu *p,stu *pp)//交换元素
{stu temp = {0};temp = *p;*p = *pp;*pp = temp;
}float SUM(float temp[], int n)//求三门成绩的总和
{float sum = 0;int i = 0;for(i = 0; i < n; i++){sum = sum + temp[i];}return sum;
}int INPUT(stu *p,int n)//输入函数
{int i;for(i= 1; i <= n; i++){printf("请输入第%d个学生的信息:姓名,年龄,三门成绩\n",i);scanf("%s%d%f%f%f",p->name,&(p->age),p->scores,p->scores +1,p->scores +2);p++;}
}int OUTPUT(stu *p,int n)//输出函数
{int i;for(i = 1; i <= n; i++){printf("第%d个学生的信息为:\n",i);printf("姓名:%s\n年龄:%d\n三门成绩:%.1f %.1f %.1f\n",p->name,p->age,p->scores[0],p->scores[1],p->scores[2]);p++;}
}stu *AGE_MAX(stu *p, int n)//求年龄最大的人的首地址
{stu *pmax = NULL;pmax = p;int i;for(i = 1; i < n; i++){p++;if((pmax->age) < (p->age)){pmax = p;}}return pmax;
}int PX_AGE(stu *p, int n)//根据年龄进行排序
{int i,j;for(i = 1; i < n; i++){for(j = 0; j < n - i; j++){if(((p + j)-> age) > ((p + j + 1) -> age)){SWAP((p + j), (p + j +1));}}}
}int PX_NAME(stu *p, int n)//根据姓名进行排序
{int i,j;for(i = 1; i < n; i++){for(j = 0; j < n - i; j++){if((strcmp(((p + j) -> name),(p + j + 1) -> name)) > 0){SWAP((p + j), (p + j +1));}}}
}int PX_SUM_SCORES(stu *p, int n)//根据三门成绩总和进行排序
{int i,j;for(i = 1; i < n; i++){for(j = 0; j < n - i; j++){if(SUM(((p + j) -> scores),N) > SUM(((p + j + 1) -> scores),N)){SWAP((p + j), (p + j +1));}}}
}int main(int argc, const char *argv[])//主函数
{stu *p = NULL;//定义一个结构体指针变量stu *pmax = NULL;//定义一个结构体指针用于功能3的返回值p = (stu *)malloc(sizeof(stu) * SIZE);//malloc空间if(NULL == p){perror("malloc_error!\n");//mallco的提示return -1;}memset(p,0,sizeof(stu) * SIZE);//对于malloc的空间进行初始化while(1){int c = 0;c = menu();if(-1 == c){break;}switch(c){case 1:INPUT(p,SIZE);break;//输入函数case 2:OUTPUT(p,SIZE);break;//输出函数case 3://求年龄最大人的首地址pmax = AGE_MAX(p,SIZE);printf("年龄最大人的首地址为:%p\n",pmax);break;case 4://根据年龄进行排序PX_AGE(p,SIZE);break;case 5://根据姓名进行排序PX_NAME(p,SIZE);break;case 6://根据三门成绩总和进行排序PX_SUM_SCORES(p,SIZE);}}free(p);p = NULL;return 0;
}
以上程序是关于近期C语言学习情况的一个综合练习,包括但不限于:
(1)结构体
struct student
{
内容;
。。
};
(2)指针
int *p = NULL;
stu *p = NULL;
(3)循环语句
for(语句1; 语句2; 语句3)
{
循环体;
}
先执行语句1,再执行语句2,再执行循环体,最后再执行语句3
(4)选择语句
if()
switch()
(5)宏定义
#define 宏名 宏体
(6)数组
数据类型 数组名 [元素个数]
int arr[N];
(7)malloc
(void*)malloc(需要开辟的空间大小)
开辟成功,函数返回值为万能指针,使用时需要进行强制转换;
失败返回-1;
等等。。。。。。
初学者的小总结,如有错误,不吝指教。
结构体与指针(使用malloc)相关推荐
- c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针...
1.指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内浅显的例子就不举了,这里举几个比较隐蔽的例子. 1.1结构体成员指针未初始化 1 2 3 4 5 6 ...
- c语言 返回函数是结构体指针变量,一个函数返回值为指向结构体的指针的问题...
一个函数返回值为指向结构体的指针的问题 #include #include struct student { int num; char name[10]; struct student *next; ...
- 指向结构体的指针和指向结构体指针的指针
例如,struct T *ptr;是指向一个结构体的指针,也可以当做一个结构体数组来用. 可以把结构体当做 int 来看,int* 类型即可以指向一个整数,也可以指向数组. struct T ** p ...
- c语言定义指向结构体的指针,C语言入门教程-指向结构体的指针
指向结构体的指针 在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型.创建结构体指针是极常见的.下面是一个例子: typedef struct {char name[21];char ci ...
- c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针
本篇是基于云天之巅博主音视频开发中的一个bug,继而查阅了的一点资料:本篇转载自博客园某博主的随笔,并做极少量的修改,原文地址:https://www.cnblogs.com/haore147/p/3 ...
- c语言中结构体的指针初始化,c语言结构体指针初始化
今天终于看完了C语言深度剖析这本书,对C语言有了进一步的了解与感悟,突然发觉原来自己学C语言的时候学得是那样的迷糊,缺少深入的思考,在重新看书的时候发觉C语言基本教材虽然经典,但是缺乏独到性,老师在讲 ...
- C++:将char*指针强制转换成一个指向结构体的指针
在使用Socket与雷达进行通信采集数据时,会遇到"打包与解包"的问题,在打包和解包过程中,会涉及到结构体指针与字符指针间的强制转换.如下: 打包就是将包头与信息封装成一定大小的包 ...
- C语言程序设计 数组,结构体和指针练习题
涉及知识点:数组,结构体和指针 分析以下程序的运行结果: #include "stdio.h" struct sp { int a; int *b; } *p ; ...
- python中的记录指针_使用Python向C语言的链接库传递数组、结构体、指针类型的数据...
使用python向C语言的链接库传递数组.结构体.指针类型的数据 由于最近的项目频繁使用python调用同事的C语言代码,在调用过程中踩了很多坑,一点一点写出来供大家参考,我们仍然是使用ctypes来 ...
- c 结构体 函数 指针
#include "stdio.h" struct DEMO { int x,y; int (*func)(int,int); //函数指针 }; int add2(int x,i ...
最新文章
- ​如何实现简单高效的移动剪辑框架
- 同字母异序词 python_49. 字母异位次分组(Python)
- 作为程序员,我在电脑上都装过哪些 Chrome 插件?
- 中国芯片人才大军在哪里?
- 从 1 加到 55 的值
- CSS3属性——(二)
- 华为电脑管家最新(11.1.1.95)版完美升级安装教程
- Oracle for update skip locked 详解
- bzoj 4484: [Jsoi2015]最小表示 拓扑排序+bitset
- 【Add_two_numbers】
- java设置pdf不可编辑_禁止编辑,但允许在Java iText / PDF中进行页面提取
- Java基础学习汇总
- android德地图点聚合,点聚合-点标记-示例中心-JS API 示例 | 高德地图API
- python成语接龙源代码,基于Tkinter,带成语解释
- Excel如何生成条形码图片?
- 【MySQL数据库】一约束
- Android桌面管理
- 清除网页缓存HTML方法
- python框架django入门_Python高级进阶(一)Python框架之Django入门
- 01一起来吃西瓜——线性回归