动态内存分配
2021/5/24 7:27:55
本文主要是介绍动态内存分配,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一.题目分析
·题目
输入整数n,动态分配保存n个整数的存储器,然后输入n个整数保存到存储器中。最后,将这n个整数从小到大输出。
·测试
输入:10回车;10 9 8 7 6 5 4 3 2 1回车
输出:1,2,3,4,5,6,7,8,9,10
二.题目分析
- 第一个输入的数表示要输入的数的个数;第二组数则是要排序的一组数。
- 输出的数是排序后的数,且最后一个数后面没有“,”。
- 使用动态内存分配函数malloc,并include头文件stdlib.h。
三.代码实现
#include <stdio.h> #include <stdlib.h> int main() { int n, * p=0,i; int j, k,max; scanf_s("%d", &n); p = (int*)malloc(n * sizeof(int)); for (i = 0; i < n; i++) scanf_s("%d", p+i); for (j = 0; j < n-1; j++) { for (k = 0; k < n - j - 1; k++) { if (p[k] > p[k + 1]) { max = p[k]; p[k] = p[k + 1]; p[k + 1] = max; } } } for (i = 0; i < n; i++) { if (i != n - 1) printf("%d,",p[i]); else printf("%d", p[i]); } return 0; }
上面的代码虽然用到了指针和动态内存分配,但是任然没有脱离数组的想法,如用p[0]表示数组的第一个元素。实际上,这时候用*p会更好。
四.代码改进
#include <stdio.h> #include <stdlib.h> int main() { int n, * p=0,i; int j, k,max; scanf_s("%d", &n); p = (int*)malloc(n * sizeof(int)); for (i = 0; i < n; i++) scanf_s("%d", p+i); for (j = 0; j < n - 1; j++) { for (k = 0; k < n - j - 1; k++) { if (p[k] > p[k + 1]) { max = p[k]; p[k] = p[k + 1]; p[k + 1] = max; } } } for (i = 0; i < n; i++) { if (i != n - 1) printf("%d,",*p); else printf("%d", *p); p++; } return 0; }
这篇关于动态内存分配的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-06数据结构和算法面试题详解与实战
- 2024-11-06数据结构与算法面试题详解及练习
- 2024-11-06网络请求面试题详解及实战技巧
- 2024-11-06数据结构和算法面试真题详解及备考指南
- 2024-11-06数据结构与算法面试真题解析与练习指南
- 2024-11-06网络请求面试真题详解及实战攻略
- 2024-11-06数据结构和算法大厂面试真题详解与实战
- 2024-11-06数据结构与算法大厂面试真题详解及入门攻略
- 2024-11-06网络请求大厂面试真题详解及应对策略
- 2024-11-06TS大厂面试真题解析与实战指南