In C, precedence of unary * and multiplication: evaluate this expression.
#include
int main()
{
int i = 3, j, k;
j = &i;
printf("%d
", i**ji + *j);
return 0;
}
-
A30
-
B27
-
C9
-
D3
-
E36
Answer
Correct Answer: 30
Explanation
Introduction / Context:This expression combines dereferencing and arithmetic. In C, whitespace is irrelevant; ij is parsed as i * *j (multiplication by the dereferenced value). Understanding operator precedence avoids misreading the expression.
Given Data / Assumptions:
- i = 3
- j = &i → *j = 3
- Expression: i * *j * i + j
Concept / Approach:Multiplication is left-associative, and unary (dereference) applies to j to yield 3. So evaluate products first, then addition.
Step-by-Step Solution:Compute *j = 3Multiply i * *j → 3 * 3 = 9Multiply by i again → 9 * 3 = 27Add j → 27 + 3 = 30Print 30
Verification / Alternative check:Introduce temporaries: a = j; printf("%d", iai + a); gives the same result.
Why Other Options Are Wrong:(b) stops before the final addition. (c) and (d) ignore parts of the expression. (e) does not arise from the given arithmetic.
Common Pitfalls:Misreading as an exponent operator (C has none), or as double-dereference; here the two stars are separate operators.
Final Answer:30