Output of C Program | Set 18

Predict the output of following C programs.

Question 1

filter_none

edit
close

play_arrow

link
brightness_4
code

#include<stdio.h>
int fun()
{
  static int num = 40;
  return num--;
}
  
int main()
{
  for(fun(); fun(); fun())
  {
    printf("%d ", fun());
  }
  getchar();
  return 0;
}

chevron_right


Output: 38 35 32 29 26 23 20 17 14 11 8 5 2



Since num is static in fun(), the old value of num is preserved for subsequent functions calls. Also, since the statement return num– is postfix, it returns the old value of num, and updates the value for next function call.

Question 2

filter_none

edit
close

play_arrow

link
brightness_4
code

#include<stdio.h>
int main()
{
  char *s[] = { "knowledge","is","power"};
  char **p;
  p = s;
  printf("%s ", ++*p);
  printf("%s ", *p++);
  printf("%s ", ++*p);
  
  getchar();
  return 0;
}

chevron_right


Output: nowledge nowledge s

Let us consider the expression ++*p in first printf(). Since precedence of prefix ++ and * is same, associativity comes into picture. *p is evaluated first because both prefix ++ and * are right to left associative. When we increment *p by 1, it starts pointing to second character of “knowledge”. Therefore, the first printf statement prints “nowledge”.

Let us consider the expression *p++ in second printf() . Since precedence of postfix ++ is higher than *, p++ is evaluated first. And since it’s a psotfix ++, old value of p is used in this expression. Therefore, second printf statement prints “nowledge”.

In third printf statement, the new value of p (updated by second printf) is used, and third printf() prints “s”.

Please write comments if you find any of the answers/explanations incorrect, or you want to share more information about the topics discussed above



My Personal Notes arrow_drop_up


Article Tags :

9


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