Open In App

GATE | GATE CS Mock 2018 | Question 27

Like Article
Like
Save
Share
Report

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



Last Updated : 10 Jan, 2018
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads