2017-03-02 5 views
-1

このコードでは、ポインタの宣言方法を理解できません。ファイルI/Oコードのポインタ宣言

#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 **);  
       ^

これらの警告とはどういう意味ですか?上記のコードでポインタをどのように使用しているか説明してください。

+2

'openfile'はファイルへのポインタへのポインタを要求します。なぜファイルへのポインタを与えるのですか? – byxor

答えて

5

fpは、FILE**ではなく、FILE*であると宣言されています。

FILE*は、 "FILEへのポインタ"です。

FILE**は、FILE "へのポインタです。

openfile()では、FILE*のデータを更新したいので、FILE*へのポインタが必要です。

結論として、openfile("Myfile.txt",&fp);を使用してopenfile()を使用する必要があります。

それはあなたがopenfile()fpを更新するためのfpのアドレスを取得する&演算子を使用しなければならないことを意味します。

関連する問題