📜  门| GATE CS Mock 2018 |问题 27

📅  最后修改于: 2021-09-25 04:20:26             🧑  作者: Mango

考虑以下两个 C 程序: P1:

int main()
{
    int (*ptr)(int ) = fun;
    (*ptr)(3);
    return 0;
}
  
int fun(int n)
{
  for(;n > 0; n--)
    printf("GeeksQuiz ");
  return 0;
}

P2:

int main()
{
    void demo();
    void (*fun)();
    fun = demo;
    (*fun)();
    fun();
    return 0;
}
  
void demo()
{
    printf("GeeksQuiz ");
}

以下哪个选项是正确的?
(A) P1 打印“GeeksQuiz GeeksQuiz”和 P2 打印“GeeksQuiz GeeksQuiz”
(B) P1 打印“GeeksQuiz GeeksQuiz”,P2 给出编译错误
(C) P1 给出编译器错误,P2 打印“GeeksQuiz GeeksQuiz”
(D)以上都不是答案: (C)
解释: P1:程序的唯一问题是在分配给 ptr 之前没有声明/定义fun 。以下程序运行良好并打印“GeeksQuiz GeeksQuiz GeeksQuiz”

int fun(int n);

int main()
{
    // ptr is a pointer to function fun()
    int (*ptr)(int ) = fun;

    // fun() called using pointer 
    (*ptr)(3);
    return 0;
}

int fun(int n)
{
  for(;n > 0; n--)
    printf("GeeksQuiz ");
}

P2:这是一个带有函数指针的简单程序。 fun 被分配到指向演示。所以这两个语句“(*fun)();”和乐趣();”意思是一样的。

选项(C)是正确的。这个问题的测验