6. What is the output of printf("%d")?
A. When we write printf("%d",x); this means
compiler will print the value of x. But as here, there is nothing after %d so
compiler will show in output window garbage value.
B. When we use %d the compiler internally uses it to access
the argument in the stack (argument stack). Ideally compiler determines the
offset of the data variable depending on
the format specification string. Now when we write
printf("%d",a) then compiler first accesses the top most element in
the argument stack of the printf which is %d and depending on the format
string it calculated to offset to the actual data variable in the memory which
is to be printed. Now when only %d will be present in the printf then compiler
will calculate the correct offset (which will be the offset to access the
integer variable) but as the actual data object is to be printed is not present
at that memory location so it will print whatever will be the contents of
that memory location.
C. Some compilers check the format string and will generate
an error without the proper number and type of arguments for things like
printf(...) and scanf(...).
7. What is the difference between "calloc(...)"
and "malloc(...)"?
1. calloc(...) allocates a block of memory for an array of
elements of a certain size. By default the block is initialized to 0. The total
number of memory allocated will be (number_of_elements * size).
malloc(...) takes in only a single argument which is the
memory required in bytes. malloc(...) allocated bytes of memory and not blocks
of memory like calloc(...).
2. malloc(...) allocates memory blocks and returns a void
pointer to the allocated space, or NULL if there is insufficient memory
available.
calloc(...) allocates an array in memory with elements
initialized to 0 and returns a pointer to the allocated space. calloc(...)
calls malloc(...) in order to use the C++ set_new_mode function to set the
new handler mode.
8. What is the difference between "printf(...)"
and "sprintf(...)"?
sprintf(...) writes data to the character array whereas
printf(...) writes data to the standard output device.
9. How to reduce a final size of executable?
Size of the final executable can be reduced using dynamic
linking for libraries.
10. Can you tell me how to check whether a linked list is
circular?
Create two pointers, and set both to the start of the list.
Update each as follows:
while (pointer1) {pointer1 = pointer1->next;pointer2 = pointer2->next;if (pointer2) pointer2=pointer2->next;if (pointer1 == pointer2) {print ("circular");}}
If a list is circular, at some point pointer2 will wrap
around and be either at the item just before pointer1, or the item before that.
Either way, its either 1 or 2 jumps until they meet.
No comments:
Post a Comment