qfedu-c-level/day10/d11.c

42 lines
1.1 KiB
C
Raw Normal View History

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// int rands[10]; // 全局变量处理方式
void *rand_arr(int size, int min, int max)
{
srand(time(NULL));
// 使用 malloc 分配内存,因为函数返回的指针是局部变量,会被释放
// 而当使用 malloc 分配内存时,内存会一直存在,直到程序结束
// malloc 存放在内存的堆区,而局部变量存放在内存的栈区
// 堆区的内存需要手动释放,栈区的内存会自动释放
int *rands = (int *)malloc(sizeof(int) * size);
// int rands[size]; // 对照上面的处理方式
// static int rands[size]; // 静态变量处理方式,但是变长数组不能使用静态变量
for (int i = 0; i < size; i++)
{
rands[i] = (rand() % (max - min + 1)) + min;
}
return rands;
}
int main()
{
int *nums = (int *)rand_arr(10, 3, 12);
for (int i = 0; i < 10; i++)
{
printf("%d ", *(nums + i));
}
printf("\n");
printf("free nums\n");
free(nums);
for (int i = 0; i < 10; i++)
{
printf("%d ", *(nums + i));
}
printf("\n");
return 0;
}