C | Operators | Question 12





int main() 
  char *s[] = { "knowledge","is","power"}; 
  char **p; 
  p = s; 
  printf("%s ", ++*p); 
  printf("%s ", *p++); 
  printf("%s ", ++*p); 
  return 0; 


(A) is power
(B) nowledge nowledge s
(C) is ower
(D) nowledge knowledge is

Answer: (B)

Explanation: 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”.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Article Tags :
Practice Tags :


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