C | Operators | Question 12
#include<stdio.h>
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 postfix ++, 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”.
Quiz of this Question
Last Updated :
12 Oct, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...