Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 4

C Interview Questions And Answ ers

[C Frequently

Asked Questions ,C FAQ ]

What is the heap?


The heap is where malloc(), calloc(), and realloc() get memory.
Getting memory from the heap is much slower than getting it from the stack. On
the other hand, the heap is much more flexible than the stack. Memory can be
allocated at any time and deallocated in any order. Such memory isnt deallocated
automatically; you have to call free().
Recursive data structures are almost always implemented with memory from the
heap. Strings often come from there too, especially strings that could be very long
at runtime. If you can keep data in a local variable (and allocate it from the stack),
your code will run faster than if you put the data on the heap. Sometimes you can
use a better algorithm if you use the heap faster, or more robust, or more flexible.
Its a tradeoff.
If memory is allocated from the heap, its available until the program ends. Thats
great if you remember to deallocate it when youre done. If you forget, its a problem.
A memory leak is some allocated memory thats no longer needed but isnt
deallocated. If you have a memory leak inside a loop, you can use up all the
memory on the heap and not be able to get any more. (When that happens, the
allocation functions return a null pointer.) In some environments, if a program
doesnt deallocate everything it allocated, memory stays unavailable even after the
program ends.

How do you use a pointer to a function?


The hardest part about using a pointer-to-function is declaring it.
Consider an example. You want to create a pointer, pf, that points to the strcmp()
function.
The strcmp() function is declared in this way:
int strcmp(const char *, const char * )
To set up pf to point to the strcmp() function, you want a declaration that looks just
like the strcmp() functions declaration, but that has *pf rather than strcmp:
int (*pf)( const char *, const char * );
After youve gotten the declaration of pf, you can #include and assign the address of
strcmp() to pf: pf = strcmp;

What is the purpose of main( ) function?


The function main( ) invokes other functions within it.It is the first function to be
called when the program starts execution.
- It is the starting function
- It returns an int value to the environment that called the program
- Recursive call is allowed for main( ) also.
- It is a user-defined function
- Program execution ends when the closing brace of the function main( ) is reached.
- It has two arguments 1)argument count and 2) argument vector (represents

strings passed).
- Any user-defined name can also be used as parameters for main( ) instead of argc
and argv

Why n++ executes faster than n+1?


The expression n++ requires a single machine instruction such as INR to carry out
the increment operation whereas, n+1 requires more instructions to carry out this
operation.

What will the preprocessor do for a program?


The C preprocessor is used to modify your program according to the preprocessor
directives in your source code. A preprocessor directive is a statement (such as
#define) that gives the preprocessor specific instructions on how to modify your
source code. The preprocessor is invoked as the first part of your compiler
programs compilation step. It is usually hidden from the programmer because it is
run automatically by the compiler.
The preprocessor reads in all of your include files and the source code you are
compiling and creates a preprocessed version of your source code. This
preprocessed version has all of its macros and constant symbols replaced by their
corresponding code and value assignments. If your source code contains any
conditional preprocessor directives (such as #if), the preprocessor evaluates the
condition and modifies your source code accordingly.

What is the benefit of using const for declaring constants?


The benefit of using the const keyword is that the compiler might be able to make
optimizations based on the knowledge that the value of the variable will not change.
In addition, the compiler will try to ensure that the values wont be changed
inadvertently.
Of course, the same benefits apply to #defined constants. The reason to use const
rather than #define to define a constant is that a const variable can be of any type
(such as a struct, which cant be represented by a #defined constant). Also, because
a const variable is a real variable, it has an address that can be used, if needed,
and it resides in only one place in memory

What is the easiest sorting method to use?


The answer is the standard library function qsort(). Its the easiest sort by far for
several reasons:
It is already written.
It is already debugged.
It has been optimized as much as possible (usually).
Void qsort(void *buf, size_t num, size_t size, int (*comp)(const void *ele1, const void
*ele2));

How many levels of pointers can you have?


The answer depends on what you mean by levels of pointers. If you mean How many
levels of indirection can you have in a single declaration? the answer is At least 12.

int i = 0;
int *ip01 = & i;
int **ip02 = & ip01;
int ***ip03 = & ip02;
int ****ip04 = & ip03;
int *****ip05 = & ip04;
int ******ip06 = & ip05;
int *******ip07 = & ip06;
int ********ip08 = & ip07;
int *********ip09 = & ip08;
int **********ip10 = & ip09;
int ***********ip11 = & ip10;
int ************ip12 = & ip11;
************ip12 = 1; /* i = 1 */
The ANSI C standard says all compilers must handle at least 12 levels. Your
compiler might support more.

Is it better to use a macro or a function?


The answer depends on the situation you are writing code for. Macros have the
distinct advantage of being more efficient (and faster) than functions, because their
corresponding code is inserted directly into your source code at the point where the
macro is called. There is no overhead involved in using a macro like there is in
placing a call to a function. However, macros are generally small and cannot handle
large, complex coding constructs. A function is more suited for this type of
situation. Additionally, macros are expanded inline, which means that the code is
replicated for each occurrence of a macro. Your code therefore could be somewhat
larger when you use macros than if you were to use functions.
Thus, the choice between using a macro and using a function is one of deciding
between the tradeoff of faster program speed versus smaller program size.
Generally, you should use macros to replace small, repeatable code sections, and
you should use functions for larger coding tasks that might require several lines of
code.

What are the standard predefined macros?


The ANSI C standard defines six predefined macros for use in the C language:
Macro Name Purpose
_ _LINE_ _ Inserts the current source code line number in your code.
_ _FILE_ _ Inserts the current source code filename in your code.
_ _ Inserts the current date of compilation in your code.
_ _TIME_ _ Inserts the current time of compilation in your code.
_ _STDC_ _ Is set to 1 if you are enforcing strict ANSI C conformity.
_ _cplusplus Is defined if you are compiling a C++ program.

What is a const pointer?


The access modifier keyword const is a promise the programmer makes to the
compiler that the value of a variable will not be changed after it is initialized. The

compiler will enforce that promise as best it can by not enabling the programmer to
write code which modifies a variable that has been declared const.
A const pointer, or more correctly, a pointer to const, is a pointer which points to
data that is const (constant, or unchanging). A pointer to const is declared by
putting the word const at the beginning of the pointer declaration. This declares a
pointer which points to data that cant be modified. The pointer itself can be
modified. The following example illustrates some legal and illegal uses of a const
pointer:
const char *str = hello;
char c = *str /* legal */
str++; /* legal */
*str = a; /* illegal */
str[1] = b; /* illegal */

You might also like