C Operators
Question 1 |
#include "stdio.h" int main() { int x, y = 5, z = 5; x = y == z; printf("%d", x); getchar(); return 0; }
0 | |
1 | |
5 | |
Compiler Error |
Discuss it
The crux of the question lies in the statement x = y==z. The operator == is executed before = because precedence of comparison operators (<=, >= and ==) is higher than assignment operator =.
The result of a comparison operator is either 0 or 1 based on the comparison result. Since y is equal to z, value of the expression y == z becomes 1 and the value is assigned to x via the assignment operator.
Question 2 |
#include <stdio.h> int main() { int i = 1, 2, 3; printf("%d", i); return 0; }
1
| |
3 | |
Garbage value | |
Compile time error |
Discuss it
Question 3 |
#include <stdio.h> int main() { int i = (1, 2, 3); printf("%d", i); return 0; }
1 | |
3 | |
Garbage value | |
Compile time error |
Discuss it
Question 4 |
#include <stdio.h> int main() { int i; i = 1, 2, 3; printf("%d", i); return 0; }
1 | |
3 | |
Garbage value | |
Compile time error |
Discuss it
Question 5 |
C
#include <stdio.h> int main() { int i = 3; printf("%d", (++i)++); return 0; }
What is the output of the above program?
3 | |
4 | |
5 | |
Compile-time error |
Discuss it
In C, prefix and postfix operators need l-value to perform operation and return r-value. The expression (++i)++ when executed increments the value of variable i(i is a l-value) and returns r-value. The compiler generates the error(l-value required) when it tries to post-incremeny the value of a r-value.
Question 6 |
#include <stdio.h> int foo(int* a, int* b) { int sum = *a + *b; *b = *a; return *a = sum - *b; } int main() { int i = 0, j = 1, k = 2, l; l = i++ || foo(&j, &k); printf("%d %d %d %d", i, j, k, l); return 0; }
1 2 1 1 | |
1 1 2 1 | |
1 2 2 1 | |
1 2 2 2 |
Discuss it
Question 7 |
#include <stdio.h> int main() { int i = 5, j = 10, k = 15; printf("%d ", sizeof(k /= i + j)); printf("%d", k); return 0; }Assume size of an integer as 4 bytes. What is the output of above program?
4 1 | |
4 15 | |
2 1 | |
Compile-time error |
Discuss it
Question 8 |
#include <stdio.h> int main() { //Assume sizeof character is 1 byte and sizeof integer is 4 bytes printf("%d", sizeof(printf("GeeksQuiz"))); return 0; }
GeeksQuiz4 | |
4GeeksQuiz | |
GeeksQuiz9 | |
4 | |
Compile-time error |
Discuss it
Question 9 |
#include <stdio.h> int f1() { printf ("Geeks"); return 1;} int f2() { printf ("Quiz"); return 1;} int main() { int p = f1() + f2(); return 0; }
GeeksQuiz | |
QuizGeeks | |
Compiler Dependent | |
Compiler Error |
Discuss it
Question 10 |
#include <stdio.h> int main() { int a = 1; int b = 1; int c = a || --b; int d = a-- && --b; printf("a = %d, b = %d, c = %d, d = %d", a, b, c, d); return 0; }
a = 0, b = 1, c = 1, d = 0 | |
a = 0, b = 0, c = 1, d = 0
| |
a = 1, b = 1, c = 1, d = 1 | |
a = 0, b = 0, c = 0, d = 0 |
Discuss it
// Since a is 1, the expression --b // is not executed because // of the short-circuit property // of logical or operator // So c becomes 1, a and b remain 1 int c = a || --b; // The post decrement operator -- // returns the old value in current expression // and then updates the value. So the // value of expression a-- is 1. Since the // first operand of logical and is 1, // shortcircuiting doesn't happen here. So // the expression --b is executed and --b // returns 0 because it is pre-increment. // The values of a and b become 0, and // the value of d also becomes 0. int d = a-- && --b;