Govt Exams
When p is a pointer to a structure, we cannot use p.x (dot notation) directly. The correct ways are: p->x (arrow operator) or (*p).x (dereference then dot operator). The notation p.x would be used only if p were a structure variable, not a pointer. Therefore, p.x is incorrect when p is a pointer.
In array notation, arr is a pointer to the first element. *(arr + 3) dereferences the pointer that points to the 4th element (index 3). Since array indexing is 0-based: arr[0]=1, arr[1]=2, arr[2]=3, arr[3]=4. Therefore, *(arr + 3) = 4.
Both malloc() and calloc() allocate dynamic memory. The key difference is that malloc() allocates uninitialized memory (contains garbage values), while calloc() allocates memory and initializes all bytes to zero. calloc() also takes two arguments (number of elements and size of each element), while malloc() takes one (total bytes needed).
int *ptr;
int arr[3] = {10, 20, 30};
ptr = arr;
printf("%d", *(ptr + 1));
ptr points to arr[0] (value 10). ptr + 1 points to arr[1] (value 20). *(ptr + 1) dereferences this pointer, giving 20.
int x = 5;
int y = ++x;
printf("%d %d", x, y);
++x is pre-increment, which increments x before assignment. So x becomes 6, then y is assigned 6. Both x and y are 6.
C uses row-major order to store 2D arrays in memory. The elements are stored row by row sequentially in memory.
The do-while loop executes the body first and then checks the condition, ensuring at least one execution. while and for loops check the condition first.
The correct syntax uses the 'struct' keyword followed by the structure name and then the member declarations enclosed in braces.
The free() function deallocates (releases) memory that was previously allocated using malloc(), calloc(), or realloc().