Java教程

动态内存分配

本文主要是介绍动态内存分配,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一.题目分析

·题目

输入整数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;
}
这篇关于动态内存分配的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!