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元起,快前往官网查看详情吧