GATE | GATE CS Mock 2018 | Question 27

Consider following two C – program :

P1 :

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


P2 :

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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

My Personal Notes arrow_drop_up
Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.