【问题标题】:Pass pointer array to function将指针数组传递给函数
【发布时间】:2013-02-15 14:30:03
【问题描述】:

我正在尝试将文件指针数组传递给函数(不确定术语)。谁能解释一下发送“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);
    }

【问题讨论】:

    标签: c arrays function-pointers fopen


    【解决方案1】:

    你需要 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:还可以阅读 Lundin 对我的回答的 cmets 很有帮助!

    【讨论】:

    • 但请注意,在函数参数的特殊情况下,FILE* (*in)[2] 等同于 FILE* in[2],两者都是 数组指针 指向 2 个 FILE* 的数组。
    • @Lundin 我有点不确定。好的然后在函数参数char* (*s)[2] == char* s[2] ?
    • @Lundin I checked here 你是正确的。在函数参数中char* (*s)[2] == char* s[2].. 谢谢:)
    • 函数参数比较混乱。无论您是像以前那样键入正式的数组指针声明,还是像我那样键入看起来像数组声明的东西,或者您只是键入 FILE*,最后都会归结为一个指针。
    • 虽然请注意您的答案中的版本是正确的,但它是声明此类参数的最正式和风格正确的方式。但对于普通程序员来说,阅读和理解它可能会很困难。
    【解决方案2】:

    试试:

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

    并称它为openfiles (in, &amp;out);。此外,“指针数组”是模棱两可的。也许称它为“文件指针数组”?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-29
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多