下面是关于C语言中使用realloc调整数组长度的详细攻略:
1. realloc函数的介绍
在C语言中,realloc函数用于在运行时重新分配之前已经分配了内存的内存块的大小。这个函数返回一个指向新分配内存的指针。如果没有足够的内存,realloc函数的返回值为NULL。realloc函数的语法如下:
ptr = realloc(ptr, size);
其中,第一个参数是指向已经分配的内存的指针,或者是NULL。如果这个参数是NULL,则realloc函数会自动分配新的内存,使用方式类似于malloc函数。第二个参数是新的内存大小,单位是字节。
2. 如何使用realloc调整动态数组大小
下面我们通过两个示例来说明C语言中如何使用realloc函数来调整动态数组的大小:
示例1
首先,我们需要定义一个动态数组,然后使用malloc函数为这个数组分配一定大小的内存。在这个示例中,我们模拟了一个长度为5的数组,然后使用for循环为每个元素赋值,再使用for循环打印数组元素。代码如下:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *arr;
int i, len = 5;
arr = (int*)malloc(len * sizeof(int));
for (i = 0; i < len; i++)
{
*(arr + i) = i * i;
}
for (i = 0; i < len; i++)
{
printf("%d\n", *(arr + i));
}
free(arr);
return 0;
}
运行结果如下:
0
1
4
9
16
接着,我们需要调整这个数组的大小。在这个示例中,我们使用realloc函数将这个数组的大小调整为10。代码如下:
arr = (int*)realloc(arr, 10 * sizeof(int));
for (i = 5; i < 10; i++)
{
*(arr + i) = i * i;
}
for (i = 0; i < 10; i++)
{
printf("%d\n", *(arr + i));
}
在使用realloc函数调整数组大小之后,我们在for循环中为新的元素赋值。可以看到,我们又增加了5个新的元素。最后,我们使用for循环打印整个数组的元素,输出结果如下:
0
1
4
9
16
25
36
49
64
81
示例2
接下来,我们再来看看另一个示例。在这个示例中,我们定义了一个结构体数组,用于存储一些学生的信息。然后,我们使用malloc函数为这个数组分配一定大小的内存,将学生信息存储在数组中,并打印输出学生信息。代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char name[20];
int age;
} Student;
int main(void)
{
Student *students;
int i, len = 3;
students = (Student*)malloc(len * sizeof(Student));
for (i = 0; i < len; i++)
{
printf("请输入第%d个学生的姓名和年龄:\n", i + 1);
scanf("%s %d", (students + i)->name, &(students + i)->age);
}
for (i = 0; i < len; i++)
{
printf("第%d个学生的姓名是%s,年龄是%d\n", i + 1, (students + i)->name, (students + i)->age);
}
free(students);
return 0;
}
这个示例输出结果如下:
请输入第1个学生的姓名和年龄:
Tom 18
请输入第2个学生的姓名和年龄:
Jerry 17
请输入第3个学生的姓名和年龄:
John 19
第1个学生的姓名是Tom,年龄是18
第2个学生的姓名是Jerry,年龄是17
第3个学生的姓名是John,年龄是19
然后,我们需要将这个学生数组的大小增加为5。在这个示例中,我们使用realloc函数将数组的大小调整为5,并将新的元素全部初始化为0。代码如下:
students = (Student*)realloc(students, 5 * sizeof(Student));
for (i = 3; i < 5; i++)
{
(students + i)->age = 0;
}
for (i = 0; i < 5; i++)
{
printf("第%d个学生的姓名是%s,年龄是%d\n", i + 1, (students + i)->name, (students + i)->age);
}
在使用realloc函数调整数组大小之后,我们使用for循环为新的元素初始化。可以看到,在打印学生信息时,新增的两个学生姓名为空,年龄为0。输出结果如下:
第1个学生的姓名是Tom,年龄是18
第2个学生的姓名是Jerry,年龄是17
第3个学生的姓名是John,年龄是19
第4个学生的姓名是,年龄是0
第5个学生的姓名是,年龄是0
3. 总结
以上就是关于C语言中使用realloc函数调整动态数组大小的完整攻略。在使用realloc函数时,我们需要特别注意已经分配的内存地址必须是使用malloc函数或calloc函数返回的指针,否则程序会出现运行时错误。另外,使用realloc函数时,我们需要将返回值重新赋给原来的指针,否则会出现内存泄漏的问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言用realloc调整数组长度 - Python技术站