2013-03-01 2 views
2

Я пытаюсь передать массив указателя файла функции (не уверен в терминологии). Может ли кто-нибудь объяснить, как правильно отправить «в [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); 
    } 

ответ

2

Try:

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

И называют это openfiles (in, &out);. Кроме того, «массив указателей» неоднозначен. Возможно, назовите это «массив указателей FILE»?

+0

Это сработало для меня, спасибо. Очень понятно и полезно. – Ben

0

Вам нужно pointer to array of FILE* type, сделайте так, как я сделал в функции ниже. Также добавьте () круглые скобки, такие как (*in), переписать приоритет Потому что по умолчанию [] имеет более высокий приоритет над оператором *. СМ: Operator Precedence

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 

CodePad

Для OP: также прочитать Комментарии Лундина к моему ответ. Прекратите помогать!

+1

Обратите внимание, однако, что в специальном случае параметра функции 'FILE * (* in) [2]' эквивалентен 'FILE * в [2]', оба являются _array pointers_ для массива из 2 FILE *. – Lundin

+0

@ Lundin Я немного не уверен. Ok, тогда в параметре функции 'char * (* s) [2]' == 'char * s [2]' **? ** –

+0

@ Lundin I [** проверено здесь **] (http: // codepad .org/aHU3VcQ4) И вы ** ПРАВИЛЬНО **. В параметре функции 'char * (* s) [2] == char * s [2]' .. Спасибо :) –

Смежные вопросы