【怪了!】函数难道不能用了吗?该如何解决

【怪了!】函数难道不能用了吗?
编了一个读文件内容的小程序,但是......

一开始程序的的代码是:

#include   "iostream.h "
#include   "stdio.h "
#include   "stdlib.h "
int   openf(char   str[],FILE   *fp);
void   readf(FILE   *fp);
void   main()
{
FILE   *fp;
char   menu[80];
cin> > menu;     //输入文件的路径
int   a;
a=openf(menu,fp);
if(a==1)
{
readf(fp);
}
else
{
cout < < "出错了 " < <endl;
exit(0);
}
}
int   openf(char   menu[],FILE   *fp)
{
if((fp=fopen(menu, "r "))==NULL)
{
return   0;
}
else
{
return   1;
}
}
void   readf(FILE   *fp)
{
char   ch;
for(ch=fgetc(fp);ch!=EOF;ch=fgetc(fp))
{
putchar(ch);
}
}
可是只要把文件路径以输入,回车之后,程序就发生错误。

反复尝试之后发现,问题出在自定义的函数   int   openf(char   str[],FILE   *fp);   身上只要把函数代码放到主函数中(以前那个函数代码删除)就没事了,修改后的代码如下:

//   Note:Your   choice   is   C++   IDE
#include   "iostream.h "
#include   "stdio.h "
#include   "stdlib.h "
void   readf(FILE   *fp);
void   main()
{
FILE   *fp;
char   menu[80];
cin> > menu;
int   a;
if((fp=fopen(menu, "r "))==NULL)
{
a=0;
}
else
{
a=1;
}
if(a==1)
{
readf(fp);
}
else
{
cout < < "出错了 " < <endl;
exit(0);
}
}
void   readf(FILE   *fp)
{
char   ch;
for(ch=fgetc(fp);ch!=EOF;ch=fgetc(fp))
{
putchar(ch);
}
}

真不知道这是为什么?
难道是   文件型指针不能分别传入两个函数里,但我把另一个有文件型指针形参的函数void   readf(FILE   *fp),的代码放到主函数中(int   openf(char   str[],FILE   *fp)这个函数代码没有放到主函数中)程序也没有事啊?问题应该是出在int   openf(char   str[],FILE   *fp)这个函数身上,到底错在那里啊?请大家帮帮忙!

------解决方案--------------------
int openf(char str[],FILE* fp);
=============>
int openf(char str[],FILE*& fp);

------解决方案--------------------
如果需要修改传入的指针的值,要么用指向指针的指针,把指针的地址传进去,要么用指针的引用。
C里边指针也是传值的,没有原生的引用语义。