首页 > 其他 > 详细

动态内存分配

时间:2021-05-23 23:26:04      阅读:30      评论:0      收藏:0      [点我收藏+]

一.题目分析

·题目

输入整数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

二.题目分析

  1. 第一个输入的数表示要输入的数的个数;第二组数则是要排序的一组数。
  2. 输出的数是排序后的数,且最后一个数后面没有“,”。
  3. 使用动态内存分配函数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;
}

动态内存分配

原文:https://www.cnblogs.com/Akizuki-Kanna/p/14801705.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!