C语言动态数组搭建-创新互联

C语言可能会有这样的一种错误写法在搭建动态数组时

10年积累的成都网站制作、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有渑池免费网站建设让你可以放心的选择与我们合作。

如图所示

int size;
	scanf_s("%d", &size);
	int num[size] = {};
	for (int i = 0; i< size; i++)
	{
		scanf_s("%d", num[i]);
	}

一旦进行上述编写编译器会进行报错

一.根据客户需要生成长度可变的动态数组

C语言头文件中提供了动态内存分配函数,可以利用动态内存分配函数进行动态数组的搭建。

1.函数malloc()

malloc函数用于分配若干字节的内存空间,返回一个指向该内存首地址(动态数组)的指针

提示:若系统不能提供足够的内存单元,函数将返回NULL空指针

malloc函数的使用方法:

int* arr = NULL, size;
	printf("一共有几个数:");
	scanf_s("%d", &size);
	arr = (int*)malloc(size * sizeof(int));

提示:1.先定义一个指针变量储存动态数组的首地址

 2.(int*)是定义一个int类型的动态数组

 3.malloc(size*sizeof(int))指申请了size个int类型字节的存储空间,可根据需要进行             改变例如将int改成float

2.calloc()函数

calloc函数用于分配若干字节的内存空间,并赋值为零

函数原型

void*calloc(num,size);
calloc函数的使用方法:

int size;
	scanf_s("%d", &size);
	int* p = NULL;
	p = (int*)calloc(size,sizeof(int));
	if (p == NULL)
	{
		exit(1);
	}

提示:1.calloc不同于malloc函数,calloc拥有两个参数,第一个size参数决定一维数组的大小,                第二个参数表示申请每个空间的字节数,确定数组元素的类型。

 2.从安全角度考虑使用calloc函数更明智因为与malloc函数不同的是calloc函数能 自动将                  分配的内存初始化为0。

3.free()函数

free()函数的功能是释放向系统动态申请的由指针p指向的储存空间

函数原型:free(*p)

动态一维数组搭建实例:找出输入所有数字中的正数

#include#include#define NULL 0
int PositiveNum(int a[], int n)
{
	int count = 0;
	for (int i = 0; i< n; i++)
	{
		int ag = a[i];
		if (ag >0)
			count++;
	}
	return count;
}
void fun(int* arr, int size)
{
	for (int i = 0; i< size; i++)
		scanf_s("%d", &arr[i]);
}
int main(void)
{
	int* arr = NULL, size;
	printf("请输入一共有几个数:");
	scanf_s("%d", &size);
	arr = (int*)malloc(size * sizeof(int));//开辟申请空间
	if (arr == NULL)
	{
		exit(1);
	}
	fun(arr, size);
	printf("共有正数%d个", PositiveNum(arr, size));
	free(arr);
	return 0;
}

4.realloc()函数

提示:realloc函数可用于改变原来分配的储存空间的大小

指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)

int m, n;//班级数(行数),学生数(列数)
	printf("请输入班级数和学生数:\n");
	scanf_s("%d,%d", &m, &n);
	int* p = NULL;
	p = (int*)calloc(m*n, sizeof(int));
	int newsize;
	printf("加几个班");
	scanf_s("%d", &newsize);
	int *map=(int*)realloc(p, newsize);

函数的返回值是新分配的存储空间的首地址,与原来的地址不一定相同,所以要定义一个新的指针变量来储存该数组的首地址。

二.长度可变的二维动态数组

二维动态数组的搭建与一维动态数组的搭建类似,下面举一个例子

输入班级数学生数并进行计算总的平均分

#include#include//函数功能:输入学生成绩
void Input(int* p, int m, int n)
{
	for (int x = 0; x< m; x++)
		for (int y = 0; y< n; y++)
		{
			scanf_s("%d", &p[x * m + n]);
			if (y == (n - 1))
			{
				printf("\n______________________\n");
			}
		}
}
//函数功能:求平均值
float aver(int* p, int m, int n)
{
	float num=0.0;
	for (int x = 0; x< m; x++)
		for (int y = 0; y< n; y++)
		{
			num += (float)p[x * m + n];
		}
	return num / ((float)(m * n));
}
//二维动态数组的搭建
int main(void)
{
	int m, n;//班级数(行数),学生数(列数)
	printf("请输入班级数和学生数:\n");
	scanf_s("%d,%d", &m, &n);
	int* p = NULL;
	p = (int*)calloc(m*n, sizeof(int));
	if (p == NULL)
	{
		exit(1);
	}
	Input(p, m, n);
	printf("两个班所有学生的平均分是%f", aver(p, m, n));
	return 0;
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页标题:C语言动态数组搭建-创新互联
URL分享:http://azwzsj.com/article/dgdhch.html