c programming
logo
Home > Free Resources > Technical Interview Questions and Concepts > C Programming Interview
Questions for Placements
C Programming Interview Questions for Placements
11 May 2023
Q1. What is C language?
Answer: The C programming language is a standardized programming language developed in the
early 1970s by Ken Thompson and Dennis Ritchie for use on the UNIX operating system. It has
since spread to many other operating systems, and is one of the most widely used programming
languages. C is prized for its efficiency, and is the most popular programming language for writing
system software, though it is also used for writing applications.
Q2. What does static variable mean?
Answer: There are 3 main uses for the static.
1. If you declare within a function: It retains the value between function calls
2. If it is declared for a function name: By default function is extern..so it will be visible from other
files if the function declaration is as static..it is invisible for the outer files
3. Static for global variables: By default we can use the global variables from outside files If it is
static global..that variable is limited to with in the file.
Q3. What are the different storage classes in C?
Answer: C has three types of storage: automatic, static and allocated. Variable having block scope
and without static specifier have automatic storage duration.
Variables with block scope, and with static specifier have static scope. Global variables (i.e, file
scope) with or without the the static specifier also have static scope. Memory obtained from calls
to malloc(), alloc() or realloc() belongs to allocated storage class.
Q4. What is hashing?
Answer: To hash means to grind up, and that?s essentially what hashing is all about. The heart of
a hashing algorithm is a hash function that takes your nice, neat data and grinds it into some
random-looking integer.
The idea behind hashing is that some data either has no inherent ordering (such as images) or is
expensive to compare (such as images). If the data has no inherent ordering, you can?t perform
comparison searches.
Q5. Can static variables be declared in a header file?
Answer: You can?t declare a static variable without defining it as well (this is because the storage
class modifiers static and extern are mutually exclusive). A static variable can be defined in a
header file, but this would cause each source file that included the header file to have its own
private copy of the variable, which is probably not what was intended.
Q6. Can a variable be both constant and volatile?
Answer: Yes. The const modifier means that this code cannot change the value of the variable, but
that does not mean that the value cannot be changed by means outside this code.
The function itself did not change the value of the timer, so it was declared const. However, the
value was changed by hardware on the computer, so it was declared volatile. If a variable is both
const and volatile, the two modifiers can appear in either order.
Q7. Can include files be nested?
Answer: Yes. Include files can be nested any number of times. As long as you use precautionary
measures, you can avoid including the same file twice. In the past, nesting header files was seen
as bad programming practice, because it complicates the dependency tracking function of the
MAKE program and thus slows down compilation. Many of today?s popular compilers make up for
this difficulty by implementing a concept called precompiled headers, in which all headers and
associated dependencies are stored in a precompiled state.
Q8. What is a null pointer?
Answer: There are times when it?s necessary to have a pointer that doesn?t point to anything. The
macro NULL, defined in , has a value that?s guaranteed to be different from any valid pointer. NULL
is a literal zero, possibly cast to void* or char*.
Some people, notably C++ programmers, prefer to use 0 rather than NULL. The null pointer is used
in three ways:
1) To stop indirection in a recursive data structure.
2) As an error value.
3) As a sentinel value.
Q9. What is the difference between printf() and sprintf() ?
Answer: sprintf() writes data to the character array whereas printf(...) writes data to the standard
output device.
Q10. How to reduce a final size of executable?
Answer: Size of the final executable can be reduced using dynamic linking for libraries.
Q11. Can you tell me how to check whether a linked list is circular?
Answer: 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.
Q12. Advantages of a macro over a function?
Answer: Macro gets to see the Compilation environment, so it can expand TIME FILE #defines. It is
expanded by the preprocessor.
For example, you can?t do this without macros
#define PRINT(EXPR) printf( #EXPR “=%d\n”, EXPR) PRINT( 5+6*7 ) // expands into
printf(”5+6*7=%d”, 5+6*7 ); You can define your mini language with macros:
#define strequal(A,B) (!strcmp(A,B))
Q13. What is the difference between strings and character arrays?
Answer: A major difference is: string will have static storage duration, whereas as a character array
will not, unless it is explicity specified by using the static keyword.
Actually, a string is a character array with following properties:
* the multibyte character sequence, to which we generally call string, is used to initialize an array
of static storage duration. The size of this array is just sufficient to contain these characters plus
the terminating NUL character.
* it not specified what happens if this array, i.e., string, is modified.
* Two strings of same value[1] may share same memory area.
Q14. Which bit wise operator is suitable for turning off a particular bit in a number?
Answer: The bitwise AND operator, again. In the following code snippet, the bit number 24 is reset
to zero.
some_int = some_int & ~KBit24;
Q15. Which bit wise operator is suitable for putting on a particular bit in a number?
Answer: The bitwise OR operator. In the following code snippet, the bit number 24 is turned ON:
some_int = some_int | KBit24;
Q16. Does there exist any other function which can be used to convert an integer or a float to a
string?
Answer: Some implementations provide a nonstandard function called itoa(), which converts an
integer to string.
#include
char *itoa(int value, char *string, int radix); DESCRIPTION
The itoa() function constructs a string representation of an integer. PARAMETERS
value: Is the integer to be converted to string representation. string: Points to the buffer that is to
hold resulting string.
The resulting string may be as long as seventeen bytes. radix: Is the base of the number; must be
in the range 2 - 36. A portable solution exists. One can use sprintf():
char s[SOME_CONST]; int i = 10;
float f = 10.20;
sprintf ( s, “%d %f\n”, i, f );
Q17. What is the benefit of using an enum rather than a #define constant?
Answer: The use of an enumeration constant (enum) has many advantages over using the
traditional symbolic constant style of #define. These advantages include a lower maintenance
requirement, improved program readability, and better debugging capability.
1) The first advantage is that enumerated constants are generated automatically by the compiler.
Conversely, symbolic constants must be manually assigned values by the programmer.
2) Another advantage of using the enumeration constant method is that your programs are more
readable and thus can be understood better by others who might have to update your program
later.
3) A third advantage to using enumeration constants is that some symbolic debuggers can print
the value of an enumeration constant. Conversely, most symbolic debuggers cannot print the
value of a symbolic constant. This can be an enormous help in debugging your program, because
if your program is stopped at a line that uses an enum, you can simply inspect that constant and
instantly know its value. On the other hand, because most debuggers cannot print #define values,
you would most likely have to search for that value by manually looking it up in a header file.
Q18. What is the quickest sorting method to use?
Answer: The answer depends on what you mean by quickest. For most sorting problems, it just
doesn?t matter how quick the sort is because it is done infrequently or other operations take
significantly more time anyway. There are three sorting methods in this author?s toolbox that are
all very fast and that are useful in different situations. Those methods are quick sort, merge sort,
and radix sort.
Q19. When should the volatile modifier be used?
Answer: The volatile modifier is a directive to the compiler?s optimizer that operations involving
this variable should not be optimized in certain ways. There are two special cases in which use of
the volatile modifier is desirable. The first case involves memory-mapped hardware (a device such
as a graphics adaptor that appears to the computer?s hardware as if it were part of the computer?
s memory), and the second involves shared memory (memory used by two or more programs
running simultaneously).
Q20. When should the register modifier be used?
Answer: The register modifier hints to the compiler that the variable will be heavily used and
should be kept in the CPU?s registers, if possible, so that it can be accessed faster.
Q21. How can you determine the size of an allocated portion of memory?
Answer: You can?t, really. free() can , but there?s no way for your program to know the trick free()
uses. Even if you disassemble the library and discover the trick, there?s no guarantee the trick
won?t change with the next release of the compiler.
Q22. When does the compiler not implicitly generate the address of the first element of an array?
Answer: Whenever an array name appears in an expression such as
array as an operand of the size of operator
array as an operand of & operator
array as a string literal initializer for a character array
Then the compiler does not implicitly generate the address of the address of the first element of
an array.
Q23. Why n++ executes faster than n+1 ?
Answer: 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.
Q24. What is the purpose of main( ) function ?
Answer: 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
Q25. How can I search for data in a linked list?
Answer: Unfortunately, the only way to search a linked list is with a linear search, because the only
way a linked list?s members can be accessed is sequentially.
Sometimes it is quicker to take the data from a linked list and store it in a different data structure
so that searches can be more efficient.
Q26. Why should we assign NULL to the elements (pointer) after freeing them?
Answer: This is paranoia based on long experience. After a pointer has been freed, you can no
longer use the pointed-to data. The pointer is said to dangle; it doesn?t point at anything useful.
If you NULL out or zero out a pointer immediately after freeing it, your program can no longer get in
trouble by using that pointer. True, you might go indirect on the null pointer instead, but that?s
something your debugger might be able to help you with immediately.
Also, there still might be copies of the pointer that refer to the memory that has been deallocated;
that?s the nature of C. Zeroing out pointers after freeing them won?t solve all problems.
Q27. What is a null pointer assignment error? What are bus errors, memory faults, and core
dumps?
Answer: These are all serious errors, symptoms of a wild pointer or subscript. Null pointer
assignment is a message you might get when an MS-DOS program finishes executing. Some such
programs can arrange for a small amount of memory to be available “where the NULL pointer
points to (so to speak). If the program tries to write to that area, it will overwrite the data put there
by the compiler.
When the program is done, code generated by the compiler examines that area. If that data has
been changed, the compiler-generated code complains with null pointer assignment. This
message carries only enough information to get you worried. There?s no way to tell, just from a
null pointer assignment message, what part of your program is responsible for the error.
Some debuggers, and some compilers, can give you more help in finding the problem.
Bus error: core dumped and Memory fault: core dumped are messages you might see from a
program running under UNIX. They?re more programmer friendly. Both mean that a pointer or an
array subscript was wildly out of bounds. You can get these messages on a read or on a write.
They aren?t restricted to null pointer problems. The core dumped part of the message is telling
you about a file, called core, that has just been written in your current directory. This is a dump of
everything on the stack and in the heap at the time the program was running.
With the help of a debugger, you can use the core dump to find where the bad pointer was used.
That might not tell you why the pointer was bad, but it?s a step in the right direction. If you don?t
have write permission in the current directory, you won?t get a core file, or the core dumped
message
Q28. What is dangling pointer in c?
Answer: If any pointer is pointing the memory address of any variable but after some variable has
deleted from that memory location while pointer is still pointing such memory location. Such
pointer is known as dangling pointer and this problem is known as dangling pointer problem.
Q29. What are merits and demerits of array in c?
Answer:
Merits:
(a) We can easily access each element of array.
(b) Not necessity to declare too many variables.
(c) Array elements are stored in continuous memory location.
Demerits:
(a) Wastage of memory space. We cannot change size of array at the run time.
(b) It can store only similar type of data
Q30. Where are the auto variables stored?
Answer: Auto variables are stored in main memory and their default value is a garbage value.
Q31. Why Preincrement operator is faster than Postincrement?
Answer: Evaluation of any expression is from left to right. Preincrement is faster because it doesn't
need to save the current value for next instruction whereas Postincrement needs to saves current
value to be incremented after execution of current instruction.
Q32. Difference between arrays and linked list?
Answer: Major differences between arrays and linked lists are: (i) In array consecutive elements
are stored in consecutive memory locations whereas in linked list it not so. (ii) In array address of
next element is consecutive and whereas in linked list it is specified in the address part of each
node.(iii) Linked List makes better use of memory than arrays.(iv) Insertion or deletion of an
element in array is difficult than insertion or deletion in linked list
Q33. What is the use of typedef?
Answer:
(i) It increases the portability.
(ii) It simplify the complex declaration and improve readability of the program.
Q34. What are library Functions?
Answer: Library Functions are predefined functions and stored in .lib files.
Q35. What is a structure?
Answer: Structure is a collection of heterogeneous (i.e. related data items which can be of
different types) held together to a single unit. The data items enclosed within a structure are called
its members which may be of data type int, float, char, array etc.
Q36. What is a pointer?
Answer: Pointer is a variable that contains address of another variable in the memory. Pointers are
quite useful in creation of linked data structures (such as linked lst, trees graphs), managing object
allocated memory dynamically, optimize the program to execute faster and use less memory.
Q37. What are the techniques you use for debugging?
Answer: (i)Using compiler?s features (ii)Read The Fine Module (iii)printf( ) debugging (iv)Code
grinding (v)Assertion
Q38. What are macros? What are its advantages and disadvantages?
Answer: Macro is a Pre-processor.Major advantage of using the macro is to increase the speed of
the execution of the program.
Major disadvantage of the macros are:
(i) No type checking is performed in macro. This may cause error.
(ii) A macro call may cause unexpected results.
Q39. What is difference between Structure and Unions?
Answer:
(i) In structure every member has its own memory whereas in union its members share the same
member space.
(ii) In structure, it is possible to initialize all the members at the same time which is not possible in
case of union.
(iii) A structure requires more space than union(for the same type of members).
(iv) In union different interpretations of the same memory space are possible which is not so in
case of structures.
Q40. What are the advantages of using Unions?
Answer:
(i) Efficient use of memory as it it does not demand memory space for its all members rather it
require memory space for its largest member only.
(ii) Same memory space can be interpreted differently for different members of the union.
Q41. What is the difference between ordinary variable and pointer in C?
Answer: An ordinary variable is like a container it can hold any value and we can change the value
of ordinary variable at a time throughout the program .A pointer is a variable that stores the
address of another Variable.
Q42. How are pointer variables initialized?
Answer: Pointer variable are initialized by one of the following two ways
- Static memory allocation
- Dynamic memory allocation
Q43. What is modular programming?
Answer: If a program is large, it is subdivided into a number of smaller programs that are called
modules or subprograms. If a complex problem is solved using more modules, this approach is
known as modular programming
Q44. Where does global, static, local, register variables and C Program instructions get stored?
Answer: Global , static, local : In main memory Register variable: In registers
C program : In main memory.
Q45. Where are the auto variables stored?
Answer: Auto variables are stored in main memory and their default value is a garbage value.
Q46. What is an lvalue?
Answer: An lvalue is an expression to which a value can be assigned. The lvalue expression is
located on the left side of an assignment statement, whereas an rvalue is located on the right side
of an assignment statement. Each assignment statement must have an lvalue and an rvalue. The
lvalue expression must reference a storable variable in memory. It cannot be a constant
Q47. What is an argument? Differentiate between formal arguments and actual arguments?
Answer: An argument is an entity used to pass the data from calling function to the called
function. Formal arguments are the arguments available in the function definition. They are
preceded by their own data types.
Actual arguments are available in the function call.
Q48. When is a switch statement better than multiple i