What will be the output of the following C code?
int main() {
int x = 5;
int *p = &x;
int q = &p;
printf("%d", q + 1);
return 0;
}
Answer: A
The correct answer is 6 because q is a pointer to pointer that points to p, which points to x. When we dereference q, we get the value of x (which is 5), and then adding 1 gives us 6, which is printed. The key concept here is understanding pointer dereferencing: a single asterisk dereferences one level, so double asterisks dereference two levels, bringing us from q to p to the actual value stored in x. Any other answer would be incorrect because it would either misunderstand the double dereferencing operation or incorrectly interpret what value is being accessed—for instance, if someone only dereferenced once or forgot to add 1, they would get a different result.
Q.2Medium
What is the output of the following code snippet?
int main() {
char arr[] = "GATE";
char *p = arr;
printf("%d\n", sizeof(arr));
printf("%d", sizeof(p));
return 0;
}
Answer: C
The output is 5 and 8 because sizeof(arr) returns 5 bytes (4 characters plus 1 null terminator in the string "GATE"), while sizeof(p) returns 8 bytes on a 64-bit system since p is a pointer variable and pointers occupy 8 bytes in 64-bit architecture. The key concept is that sizeof() behaves differently for arrays versus pointers: when applied to an array, it returns the total memory allocated for the entire array, but when applied to a pointer, it only returns the size of the pointer itself, not what it points to. Other options would be incorrect because they either miscalculate the array size by forgetting the null terminator, use incorrect pointer sizes (like 4 bytes for 32-bit systems), or confuse the size of the array with the size of the pointer variable.
Q.3Medium
Which of the following operations has an average time complexity of O(1) in a Hash Table with good hash function and low collision rate?
Answer: C
Hash Tables achieve O(1) average-case time complexity for both insertion and search operations when using a well-designed hash function that minimizes collisions and maintains a good load factor.
Deletion also operates in O(1) average time.
However, in worst-case scenarios with poor hash functions or high collision rates, these operations can degrade to O(n).
The key to performance is maintaining low collision rates through techniques like chaining or open addressing.
Q.4Medium
Which data structure is most suitable for implementing a priority queue where elements with higher priority need to be dequeued first?
Answer: C
A Heap (either Min-Heap or Max-Heap) is the optimal data structure for implementing priority queues with O(log n) insertion and deletion time complexity.
In a Max-Heap, the element with the highest priority is always at the root, enabling efficient extraction of the maximum element.
Arrays and Linked Lists would require O(n) time for priority-based operations, while Graphs are unsuitable for this purpose.
Heaps are fundamental in algorithms like Dijkstra's and Prim's for finding shortest paths.
Q.5Medium
What is the output of the following C code?
int x = 5;
int y = ++x + x++;
printf("%d", y);
Answer: D
This code exhibits undefined behavior because x is modified twice between sequence points without an intervening sequence point. The result depends on the compiler's implementation.
Advertisement
Q.6Medium
What is the difference between scanf() and gets() functions?
Answer: A
scanf() reads formatted input based on format specifiers and stops at whitespace. gets() reads a string until a newline is encountered. Note: gets() is deprecated due to buffer overflow vulnerabilities.
Q.7Medium
What is the correct way to allocate memory for a single integer using malloc()?
Answer: D
Both A and B are correct. Option A uses explicit type casting which is optional in C (not in C++). Option B avoids casting. Using sizeof(int) is preferred over hardcoding 4, as int size may vary across systems.
Q.8Medium
What is the output of the following C code?
int x = 5;
int *ptr = &x;
printf("%d %d", *ptr, x);
Answer: A
*ptr dereferences the pointer to access the value at the address it points to, which is x = 5. So both *ptr and x print 5.
Q.9Medium
What happens when you use the strcpy() function without bounds checking?
Answer: B
strcpy() does not perform bounds checking. If the source string is longer than the destination buffer, it will write beyond the buffer boundary, causing a buffer overflow. This is a security vulnerability. Using strncpy() is safer.
Q.10Medium
What is the output of the following C code?
int arr[] = {10, 20, 30};
int *ptr = arr;
printf("%d", *(ptr + 1));
Answer: B
ptr points to arr[0]. ptr + 1 points to arr[1]. *(ptr + 1) dereferences to get the value at arr[1] which is 20. Pointer arithmetic adds sizeof(int) to the address for each increment.
Q.11Medium
Which of the following correctly describes the scope of a static variable declared inside a function?
Answer: A
A static variable declared inside a function has local scope (visible only within that function) but persists for the entire program lifetime. Its value is retained between function calls and is initialized only once.
Q.12Medium
What will be the output of the following C code?
int x = 10;
int y = 20;
int z = x < y ? x++ : y++;
printf("%d %d %d", x, y, z);
Answer: B
Step 1: Evaluate condition x < y → 10 < 20 → true. Step 2: Execute true branch: x++ returns 10, then x becomes 11. Step 3: z = 10. Step 4: printf prints x=11, y=20, z=10.
Q.13Medium
In C, a pointer variable stores which of the following?
Answer: B
A pointer is a variable that stores the memory address of another variable. It is declared using the * symbol.
Q.14Medium
What is the purpose of the malloc() function in C?
Answer: B
malloc() (memory allocation) allocates a block of memory dynamically during program execution and returns a pointer to it.
Q.15Medium
Which of the following correctly initializes an array of 5 integers?
Answer: A
Arrays in C are declared with square brackets containing the size, followed by initialization in curly braces. Option A is the correct syntax.
Q.16Medium
What is the default return type of a function in C if not explicitly specified?
Answer: B
In C, if a function's return type is not explicitly specified, it defaults to int. However, modern C standards require explicit return type declaration.
Q.17Medium
What does the break statement do in a loop?
Answer: B
The break statement immediately terminates the loop and transfers control to the statement following the loop.
Q.18Medium
Which of the following is used to access members of a structure using a pointer?
Answer: B
The arrow operator (->) is used to access structure members through a pointer. The dot operator (.) is used for direct access.
Q.19Medium
In C, what is the purpose of the #define directive?
Answer: B
#define is a preprocessor directive used to define symbolic constants (macros) and performs text substitution before compilation.
Q.20Medium
What is the correct way to declare a function that takes no parameters and returns an integer?
Answer: B
To explicitly declare a function with no parameters in C, use 'void' as the parameter. int func(); is ambiguous in older C standards.