文件I / O代码中的指针声明

时间:2017-03-02 02:26:12

标签: c pointers

我无法理解如何声明指针的代码。

#include <stdio.h>

void openfile(char *, FILE **);
int main()
{
     FILE *fp;
     openfile("Myfile.txt",fp);

     if (fp == NULL)
        printf("Unable to open file..\n");

     fclose(fp);
     return 0;

}

void openfile(char *fn, FILE **f)
{
    *f = fopen(fn,"r");
}

当我跑到上面的程序时,我得到2个警告......

file.c:9:3: warning: passing argument 2 of ‘openfile’ from incompatible pointer type [enabled by default]
     openfile("Myfile.txt",fp);
                           ^
file.c:3:6: note: expected ‘struct FILE **’ but argument is of type ‘struct FILE *’
void openfile(char *, FILE **);    
                   ^

这些警告意味着什么?请问您能解释一下如何在上面的代码中使用指针吗?

1 个答案:

答案 0 :(得分:5)

fp声明为FILE*,而不是FILE**

FILE*是&#34;指向FILE&#34;。

的指针

FILE**指向&#34;指针FILE&#34;&#39;。

openfile()中,它想要更新FILE*数据,因此请求指向FILE*的指针。

总之,您应该使用openfile("Myfile.txt",&fp);来使用openfile()

这意味着您应该使用&运算符获取fp的地址,以便fp更新openfile()