In the expression: int arr[5]; int *p = arr; What does p + 2 represent?
Pointer arithmetic scales by data type size. p + 2 moves 2 * sizeof(int) bytes forward, pointing to arr[2].
What is the purpose of the const keyword in: int * const p;?
const after * means the pointer address cannot change, but the data it points to can be modified.
Which scenario demonstrates a dangling pointer?
Dangling pointer occurs when memory is freed but pointer still references that location. This causes undefined behavior.
For function: void modify(int *x) { *x = 20; } If called as modify(&a), what changes?
Passing address allows function to modify original variable. *x = 20 changes the value at that address.
Which of the following is valid pointer comparison?
Pointers of same type can be compared using <, >, ==, !=. Comparing with integers or different types is invalid.
Advertisement
In: int *p; *p = 10; What is the issue?
p is not initialized to valid address. Dereferencing causes undefined behavior (writing to random memory location).
For dynamic 2D array allocation using int arr = (int)malloc(n*sizeof(int*)); what must be done next?
After allocating memory for pointers, each pointer (row) must be allocated memory individually in a loop before accessing arr[i][j].
Which of the following is a valid pointer comparison in C?
Comparing pointers with NULL is valid. Comparing unrelated pointers or subtracting pointers from different arrays is undefined behavior.
What will be the output?
int arr[5] = {1,2,3,4,5};
int *p = arr;
p += 2;
printf("%d", *p);
p points to arr[0]. After p += 2, p points to arr[2] which contains value 3. Pointer arithmetic moves by element size.
In pointer to function declaration: int (*ptr)(int, int); which statement is correct?
The parentheses around *ptr indicate ptr is a pointer. It points to a function that takes two int parameters and returns an int.
Consider a function void modify(int *x) { *x = 20; } called as modify(&y). What happens?
When &y is passed to a function expecting a pointer parameter, the address is passed. Changes via pointer dereference affect the original variable.
What happens when you initialize a structure variable without assigning values?
Uninitialized local structure variables contain garbage values. Global structures are automatically initialized to zero.
Which of the following correctly declares a pointer to a structure?
Correct syntax is 'struct typename *pointerName;'. Option A follows proper declaration syntax.
What is the difference between struct and typedef struct?
typedef struct creates an alias, so you can declare variables directly using the alias name without repeating 'struct'.
What will be printed?
struct s { int a; char b; int c; }; printf("%lu", sizeof(struct s));
Due to memory alignment/padding: int a(4) + char b(1) + 3 padding bytes + int c(4) = 12 bytes.
How do you access a member of a structure using a pointer?
The arrow operator (->) is used to access structure members through a pointer. Dot (.) is for direct variables.
What is the purpose of padding in structures?
Padding ensures that structure members are aligned in memory according to their natural boundaries, improving CPU access speed.
Consider: union u { int x; double y; }; What is sizeof(u)?
The size of a union is equal to its largest member. double is typically 8 bytes, which is larger than int (4 bytes).
Consider struct test { int x; double y; char z; }; What is the minimum size of this structure (assuming 4-byte int, 8-byte double)?
Due to padding: int (4) + padding (4) + double (8) + char (1) + padding (3) = 24 bytes. The structure aligns to the largest member size.
What will be printed by this code? struct s { int a; struct s *next; }; struct s *ptr; sizeof(struct s)
sizeof(int) = 4 bytes, sizeof(pointer) = 8 bytes (on 64-bit systems). Total = 12 bytes. Pointers are fixed size regardless of what they point to.