求解C函数指针这个问题

求助一些关于C语言函数指针的问题

我在vs2013里面写了乳腺代码

//test.c
#include<stdio.h>
#include<stdarg.h>
typedef (*P)();
void fun(int n, P print)
{
int i;
for (i = 0; i < n; i++)
{
char a = ‘a’;
double r;
int *q;
q=print(i,i,a);
if (*q == i)
{
printf("====");
}
printf("%d\n", *q);
}
}

//main.c
#include<stdio.h>

int* print2(int n,int m,char a)
{
printf(“print2 %d\t%c\n”,n+m,a);
int n1=n;
return &n1;
//return n;
}

int mian()
{
fun(10,print2);
return 0;
}

为什么在test.c文件中的fun函数当直接return函数里面的形参的地址,如return &n,返回的结果是这样求解C函数指针这个问题

在test.c文件中的函数fun中将形参的值赋值给一个新定义的变量,如,int n1;n1=n;return n1;得到的结果却是这样的。
求解C函数指针这个问题