为什么这样循环输出结果是错误的?求指点

#include<stdio.h>
#include<stdlib.h>

int * fun(int n)
{  
int arr[100];
int m=n;
int k=0;
for(int i=2;i<m;i++)
{
for(int j=2;j<=i;j++)
{
if(i%j==0)
{
if(m%j==0)
break;
else
if(j==i)
arr[k++]=i; 
}
}
}
return arr;
}

int main(void)
{
int *p=fun(40); 
int len =10;
for(int i=0;i<len;i++)
printf("%d ",*(p+5));
}
这样循环输出结果是错误的,但是我手动一个一个的输出就是正确的比如 printf("%d",*(p+0)), printf("%d",*(p+1)), printf("%d",*(p+2)), printf("%d",*(p+3))~~~~~`这样就正确

互换的青春
浏览 139回答 2
2回答

12345678_0001

fun函数内arr是一个局部变量,return arr;是非法的,需要将int arr[100];改为:int *arr=(int*)malloc(100*sizeof(int));还有,printf("%d ",*(p+5));应该为printf("%d ",*(p+i));

慕的地8271018

printf("%d ",*(p+5));&nbsp;这一句改成printf("%d ",*(p+i));&nbsp;另外你fun返回的是局部变量 arr该变量的生命周期只在fun内&nbsp;你在主函数里面赋值给了p是有安全隐患的&nbsp;int arr[100];应改为 static int arr[100];
打开App,查看更多内容
随时随地看视频慕课网APP