calloc() takes two parameters (number of elements, size) and initializes all bytes to zero, while malloc() leaves memory uninitialized.
Q.22Medium
What is the output of this code?
int *p, *q;
int x = 5;
p = &x;
q = p;
printf("%d %d", *p, *q);
Answer: A
Both p and q point to the same variable x. Dereferencing both gives the value 5.
Q.23Medium
Which statement correctly declares a pointer to a pointer?
Answer: B
int **p declares a pointer to a pointer (double pointer). Each * adds one level of indirection.
Q.24Medium
What will be printed?
int x = 100, y = 200;
int *p = &x;
int *q = &y;
p = q;
printf("%d", *p);
Answer: B
p is reassigned to point to y (p = q). Dereferencing p now gives the value of y, which is 200.
Q.25Medium
What is the primary disadvantage of using free() without proper checks?
Answer: B
Calling free() on already freed memory or using a pointer after freeing it causes double-free errors and use-after-free bugs, leading to undefined behavior.
Advertisement
Q.26Medium
What will be the output?
char *str = "Hello";
printf("%c", *(str+1));
Answer: B
str points to 'H', str+1 points to 'e'. Dereferencing gives 'e'.
Q.27Medium
What is the output?
void func(int *arr) { arr[0] = 100; }
int main() {
int a[5] = {1,2,3,4,5};
func(a);
printf("%d", a[0]);
}
Answer: B
Arrays are passed by reference (as pointers). Changes made in func() affect the original array. a[0] becomes 100.
Q.28Medium
Which of the following is valid pointer arithmetic in C?
Answer: A
Valid pointer arithmetic includes addition/subtraction with integers and subtraction between pointers. Multiplication, division, and pointer addition are invalid.
Q.29Medium
Which of the following correctly declares a pointer to a function that takes two integers and returns an integer?
Answer: A
int (*ptr)(int, int) declares a pointer to a function. int *ptr(int, int) declares a function returning pointer to int.
Q.30Medium
What happens when you try to modify a string literal through a pointer?
char *str = "Hello";
str[0] = 'J';
Answer: B
String literals are stored in read-only memory. Attempting to modify causes undefined behavior or segmentation fault.
Q.31Medium
Consider the code:
int *p = NULL;
int *q = malloc(sizeof(int));
free(q);
free(q);
What is the issue here?
Answer: A
Freeing the same pointer twice causes double free error and undefined behavior. Should set q=NULL after first free.
Q.32Medium
What is the output?
int a = 10;
int *p = &a;
int *q = p;
q = NULL;
printf("%d", *p);
Answer: A
q = NULL only changes q, not p. p still points to a, so *p prints 10.
Q.33Medium
Which pointer operation is NOT valid in C?
Answer: C
Pointer multiplication is not allowed. Valid operations are addition, subtraction, increment, decrement, and comparison.
Q.34Medium
What is the output?
int arr[2][3] = {{1,2,3}, {4,5,6}};
int *p = (int*)arr;
printf("%d", *(p+4));
Answer: A
Array flattened: 1,2,3,4,5,6. p+4 points to 5th element which is 5.
Q.35Medium
Which of the following is correct about pointer assignment?
int *p, *q;
p = q; // What happens?
Answer: B
p = q copies the address stored in q to p. Now both point to same location.
Q.36Medium
What is the output?
int x = 5;
int *const p = &x;
x = 10;
printf("%d", *p);
Answer: B
const pointer p cannot be changed, but x can be modified. *p prints current value of x which is 10.
Q.37Medium
What is the output?
int arr[] = {10, 20, 30};
int *p = arr;
printf("%d", sizeof(p));
Answer: B
p is a pointer, so sizeof(p) returns pointer size (8 bytes on 64-bit, 4 on 32-bit), not array size.
Q.38Medium
Consider the code: int x = 10; int *p = &x; int q = &p; What is the value of q?
Answer: A
q points to p, p points to x. **q dereferences twice: first gets p's value (address of x), second gets x's value (10).
Q.39Medium
Which operation is NOT allowed on void pointers in C without explicit casting?
Answer: B
Void pointers cannot perform pointer arithmetic (++, --, +n) directly. They must be cast to a specific type first.
Q.40Medium
What is the difference between NULL and a wild pointer?
Answer: A
NULL is explicitly set to address 0, while wild pointers contain garbage values from uninitialized memory.