2

ファイル ポインター配列を関数に渡そうとしています (用語についてはわかりません)。「in [2]」を送信する適切な方法を誰か説明してもらえますか? ありがとうございました。

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

    void openfiles (FILE **in[], FILE **out)
    {
        *in[0] = fopen("in0", "r");
        *in[1] = fopen("in1", "r");
        *out   = fopen("out", "w");
    }

    void main()
    {
        FILE *in[2], *out;

        openfiles (&in, &out);
        fprintf(out, "Testing...");

        exit(0);
    }
4

2 に答える 2

2

試す:

void openfiles (FILE *in[], FILE **out)
{
    in[0] = fopen("in0", "r");
    in[1] = fopen("in1", "r");
    *out   = fopen("out", "w");
}

そして、それを呼び出しますopenfiles (in, &out);。また、「ポインタ配列」はあいまいです。おそらく「FILEポインタの配列」と呼んでいますか?

于 2013-03-01T06:24:34.560 に答える
0

pointer to array of FILE* type以下の関数で行ったように実行する必要があります。デフォルトでは演算子よりも優先順位が高いため、優先順位を上書きする()ように括弧も追加します。参照:演算子の優先順位(*in)[]*

void openfiles (FILE* (*in)[2], FILE **out){
    (*in)[0] = fopen("in0", "r");
    (*in)[1] = fopen("in1", "r");
    *out   = fopen("out", "w");
}

文字列に対する私の例は、概念を理解するのに役立ちます。

#include<stdio.h>
void f(char* (*s)[2]){
 printf("%s %s\n", (*s)[0],(*s)[1]);    
} 
int main(){
 char* s[2];
 s[0] = "g";
 s[1] = "ab";
 f(&s);
 return 1;
}

出力:

g ab

コードパッド

OPの場合:私の回答に対するLundinのコメントも読んでください

于 2013-03-01T07:11:59.887 に答える