Open In App

GATE | GATE CS Mock 2018 | Question 27

Consider following two C – program :

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 ");
}

Which of the following option is correct?
(A) P1 printed “GeeksQuiz GeeksQuiz” and P2 printed “GeeksQuiz GeeksQuiz”
(B) P1 printed “GeeksQuiz GeeksQuiz” and P2 gives compiler error
(C) P1 gives compiler error and P2 printed “GeeksQuiz GeeksQuiz”
(D) None of the above

Answer: (C)
Explanation: P1 : The only problem with program is fun is not declared/defined before it is assigned to ptr. The following program works fine and prints “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 : This is a simple program with function pointers. fun is assigned to point to demo. So the two statements “(*fun)();” and “fun();” mean the same thing.

Option (C) is correct.

Quiz of this Question


Article Tags :