#include<stdio.h>
#include<stdlib.h>
int* getNumbers(int start,int end,int num){
int a[num];
srand(time(0));
for(int i=0;i<num;i++){
a[i]=start+rand()%(end-start);
printf(">>%d\n",a[i]);
}
return a;
}
int main()
{
int num=20;
int *a;
a=getNumbers(0,100,num);
for(int i=0;i<num;i++){
printf("%d: %d,\n",i,a[i]);//这里循环打印只有第一次正确,后面就乱了
}
printf("%d",a[3]);//直接用数字可以打印出来,但只能输出一次正确的,在输出就错了
}
数组赋值后循环打印只有一次正确后面值出错
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
a5156520 2024-11-25 15:29关注函数中定义的数组是局部变量,其内存在函数返回后会释放,所以需要在函数中申请一块动态内存来保存产生的随机数,或者传入一个数组的地址也可以。
修改如下:
参考链接:C语言——malloc函数详解-CSDN博客 文章浏览阅读5.9w次,点赞245次,收藏1.1k次。malloc函数和free函数详解引言:为什么使用动态内存分配当你声明数组时,你必须用一个编译时常量指定数组的长度。但是,数组的长度常常在运行时才知道,这是由于它所需要的内存空间取决于输入数据。例如,一个用于计算学生等级和平均分的程序可能需要存储一个班..._mallochttps://blog.csdn.net/tyustli/article/details/83304801
#include<stdio.h> #include<stdlib.h> #include <time.h> int* getNumbers(int start,int end,int num){ // https://blog.csdn.net/tyustli/article/details/83304801 // 因为函数中定义的普通数组是局部变量,函数返回后,其对应的内存会释放 // 所以这里需要申请一段动态内存来保存产生的随机数 int *a=(int *)malloc(sizeof(int)*num); srand(time(0)); for(int i=0;i<num;i++){ a[i]=start+rand()%(end-start); printf(">>%d\n",a[i]); } return a; } int main() { int num=20; int *a; a=getNumbers(0,100,num); for(int i=0;i<num;i++){ printf("%d: %d,\n",i,a[i]); } printf("%d",a[3]); free(a); a=NULL; return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报 编辑记录解决 1无用