51 C interview questions to hire the best developers

51 c interview questions to hire the best developers
ShareShare on FacebookShare on TwitterShare on LinkedIn

Table of contents

Are you a hiring manager, HR manager, or recruiter tasked with recruiting top C developers for your organization? If the answer is yes, this article is for you. 

Finding the right developers has never been easy – but as a result of the pandemic, talent shortages are becoming even worse. In 2021 there was a 43% decline in enrollment for Computer and Information Science programs[1], which means there’s far more competition for great junior developers – and it’s only expected to become stronger.

That’s one of the main reasons why it’s crucial to have a streamlined and objective hiring process enabling you to recruit the best talent quickly and efficiently – and why you must ask the right C interview questions and be able to accurately evaluate applicants’ responses. 

It’s also key to use a robust skills testing platform like TestGorilla to help with candidate screening before the interview stage. For example, you can use the C Entry-Level Algorithms test for entry-level developers or C Language-Specific Concepts test for mid-level developers.

c programming language definition

Developers and engineers who do well on our C tests have strong skills in C. If C is one of the programming languages your organization is using, hiring the best C developers is instrumental for its growth over the next few years.

Once you’ve used skills tests to identify the best candidates, you need to interview them. Here are 51 C interview questions along with sample answers to help you pick the cream of the crop.

Make skills testing part of your recruiting process

1. What is the main advantage of using macro expression instead of function?

Execution speed is faster with Macro. In function, time is spent passing control from one function call to the next. In macro expression, zero time is spent passing control.

2. Define pointer.

This is a variable that either stores or points to the address of another variable. A normal variable stores the variable value while the pointer variable stores the variable address.

3. Explain what “pointer to pointer” means.

Also known as a double pointer, a pointer to pointer is used to store another pointer’s address. The variable’s address is stored in the first pointer, while the first pointer’s address is stored in the second pointer.

4. Does C support function overloading?

No. C does not allow function overloading in the code.

5. Define preprocessor.

This is software that sends a source file to be compiled after processing it. It can include line control, header files, conditional compilation, and macro expansions.

6. List the most important features of C. 

C has several key features that make it a powerful programming language. C:

  • Is very simple, fast, and efficient

  • Makes use of pointers

  • Is machine independent/portable

  • Is a structured, mid-level programming language

  • Features a comprehensive library of functions

  • Has dynamic memory management

  • Is extensible

7. What is the difference between static int and global int declaration?

The key difference between static int and global int declaration is scope. A global variable can be seen everywhere within the program.

8. Explain what is the difference between char const* p and const char* p.

There is no difference between char const* p and const char* p. You may choose char const* p over const char* p as the semantics are from right to left. But there is no difference in their function.

9. Explain why C is a mid-level language. 

C sits between low-level (assembly-level) languages and high-level languages, so it can be used for the programming of systems (such as operating systems) as well as applications (e.g., spreadsheet applications). 

C combines the best features of high-level languages with the flexible nature of low-level languages. 

10. Explain how scanf() and printf() and functions are used.

You use scanf() to read data from a standard input stream, usually a keyboard. You use printf() to print the display output.

11. What are format specifiers?

Format specifiers are used for input and output purposes. They allow the compiler to understand the data type in a variable while printing via printf() function and receiving input via scanf() function. 

12. List some format specifiers for scanning and printing purposes. 

Here are some examples of format specifiers for scanning and printing purposes: 

  • %c is used for scanning and displaying a character value

  • %d is used for scanning and printing an integer value 

  • %f is used for scanning and displaying a float value

  • %s is used for scanning and printing a string

13. Define recursion.

Recursion is the repetition of items in a self-similar way. If a program allows a function to call itself, it is known as recursion (or recursive function).

14. Define typecasting.

Typecasting is a process where a variable that belongs to one data type is changed into another. Depending on what you want your program to do, the compiler will automatically change one data type to another.

15. What are enumerations?

Also known as enum in C, an enumeration is a user-defined data type consisting of constant integers or integrals with user-assigned names. Enum in C makes the entire program easy to understand and maintain.

16. Explain what a built-in function is. 

Built-in functions make developers’ lifes easy by assisting them in doing commonly-used, predefined tasks. Built-in functions are also known as library functions.

17. Name some common built-in functions

Some popular built-in functions are:

  • printf()

  • scanf()

  • strcmp

  • strlwr

  • strcpy

  • strlen

  • Strcat

18. Explain what the #line is used for. 

You use the #line to reset the filename and line number in the code.

19. Explain when you would use the register storage specifier. 

You use the register storage specifier when you’re using a variable regularly. You should declare it with the register storage specifier so that the compiler allocates a CPU register. This will increase the speed of looking up that variable. 

20. Explain what a token is. 

Tokens are the smallest single elements you can use when creating a program. 

21. List the six token types in C.

The six token types in C are:

  • Constants

  • Identifiers

  • Operators

  • Keywords

  • Strings

  • Special Characters

22. What is a near pointer?

A near pointer is 16 bits in size and can access 64Kb of data at a time. It can’t access an address beyond that particular data segment. An arithmetic operator can increment or decrement the address range.

23. What is a far pointer?

A far pointer is 32 bits in size and can access all 16 segments. It can store segments and offset addresses. When you increment or decrement a far pointer, you only change the offset part. 

24. What is a huge pointer?

A huge pointer is similar to a far pointer as it is 32 bits in size. The main difference is that it can access even bits stored outside of the segment, which isn’t possible with far pointers.

25. Explain what a memory leak is.

A memory leak happens when you have created memory in a heap but forgot to delete it. The program does not use this memory and it’s reserved for no reason. Too many memory leaks will harm the computer’s performance (e.g., slowing it down, causing crashes in applications, and so on).

26. How can you avoid memory leaks?

There are a few strategies to avoid memory leaks; for example, you can: 

  • Use a counter that monitors the allocation of memory

  • Write the free function after every calloc or malloc 

  • Don’t work on the original pointer and instead work on a copy of the pointer

  • Make sure you write proper comments in every code section

  • Free memory from child to parent (and not vice versa) to avoid orphaning memory

27. What is the default parameter passing mechanism in C?

By default, it is called by value.

28. Can you explain the difference between calloc() and malloc()?

Both are memory allocation functions. Calloc() can take two arguments, while malloc() can only take one argument (the number of bytes).

29. If the same name has been given to a local and global variable, can you access the global variable from a local variable defined block?

This is impossible in C. The local variable always gets preference. 

30. Define dangling pointers.

Dangling pointers point to memory that is already freed. There is no allocation of storage anymore. It may cause a segmental fault if you try to access it. 

31. How do dangling pointers differ from memory leaks?

A dangling pointer points to memory that has been deallocated, whereas a memory leak is when you’ve forgotten to deallocate memory. 

32. Define typedef.

You can use this keyword to define synonyms or aliases for an existing type. Typedef can shorten code, whether it’s a simple integer or a complex structure declaration. 

33. List the types of decision control statements in C.

There are three main types of decision control statements in C, which are:

  • if-else 

  • if 

  • nested if

34. Which is better, #define or enum?

Enum is usually better than #define because of its:

  • Better debugging capabilities

  • Lower maintenance

  • Improved program readability

35. Define dynamic memory allocation (DMA). 

This is the process of allocating memory during run time or execution time.

36. What are the advantages of dynamic memory allocation over static memory allocation?

Dynamic memory allocation (DMA) is ideal:

  • When you don’t know how much memory you need before executing a program

  • When you want efficient memory use

  • When you want a data structure with no upper memory space limit

  • For easy dynamically created list insertions and deletions 

  • When you want to use the concept of structures and linked lists

37. List the four dynamic memory allocation library functions.

The four dynamic memory allocation library functions are:

  • calloc()

  • malloc()

  • realloc()

  • free()

38. What is l-value?

L-value is short for locator value. It represents an object that takes up memory space and has an identified location (in other words, an address).

39. What is r-value?

R-value is an expression that doesn’t represent an object that takes up memory space and therefore does not have an identified location. 

To link a program with the OS, you use the file structure. The standard input/output header file defines the file with information such as memory location, current size, and so on. It will point to the character you are currently opening via a character pointer. A link is established between the program and OS when opening a file.

41. Differentiate between struct and union.

A struct allows the simultaneous accessibility of all complex data structures because it allocates separate memory locations of each structure stored in the memory block. In union, the same location is used.

42. Explain the difference between #include “…” and #include <…>.

When using #include <…>, the preprocessor will first look for the filename in a predefined system directories list. After that, it will look at directories as instructed by the user. 

When using #include “…”, the preprocessor will first look for the filename in the same directory as the file that contains the directive. It will then follow the search path you’ve defined for the #include <…> form.

43. Explain the difference between ‘g’ and “g”.

‘G’ and “g” are different in the following way: 

  • ‘g’ refers to variables identified as character

  • “g” refers to variables identified as string

44. Explain why it’s not a good idea to use gets().

The problem with gets() is that it will not check if the variable size is under the maximum data type size. This can mean that input is written into memory where it shouldn’t be. It could also leave the system susceptible to buffer overflow. 

45. What can bitwise operators operate upon?

They can operate on ints and chars. 

46. Explain what a dynamic data structure (DDS) is. 

A dynamic data structure (DDS) is a collection or organization of data stored in memory that can shrink or grow in size. This allows you to control how much memory is used. 

DDS can change size by allocating or deallocating memory from the heap as and when needed. DDS gives you the flexibility to adjust how much memory is consumed by software programs.

47. Explain how you would check if a linked list is circular.

To check if a linked list is circular, you need to traverse the linked list. The list is circular if you verify that the node points to the head. 

48. Explain how you would override a defined macro.

You need to use the #undef preprocessor, which will undefine (i.e., override) a macro that’s been previously defined.

49. Why should the end of every program statement have a semicolon?

A semicolon (;) will act as a border between two sets of statements. It aids in how the compiler parses/reads the code and how well it breaks down the code into sets of statements.

50. What’s the difference between source codes and object codes?

Source codes are instructions written using human-readable programming language, whereas object codes are sequences of statements in machine language. 

51. Explain the use of header files in C.

Header files contain macro, data type definitions, function definitions, and more. These definitions can be imported via the #include directive to the source code. 

Ask the right questions to spot the best C developers and engineers 

Hiring managers face a complex challenge: There’s a general shortage of skilled developers. At the same time, demand for specific coding languages, such as C, is increasing.

Despite being around since the early 70s, the C programming language is still in high demand because it combines low-level and high-level language features, which makes C very flexible. 

Therefore, attracting the best C developers and engineers is crucial to the success of your organization.

One way to identify and hire the best talent is to ask good C interview questions at the interview stage. Combine this with skills tests prior to interviews, and you’ll see your time to hire drop significantly.

With TestGorilla, not only can you test your candidates for particular coding languages such as C, but you can also test for knowledge of the basic principles of software engineering with the Software Engineer test, or also assess applicants’ soft skills or cognitive abilities. 

With TestGorilla by your side, you’ll be sure to hire the most talented C developers and engineers to beat the competition. Try it for free.


1. The 2021 Software Developer Shortage Is Coming. Communications of the ACM. Retrieved September 14, 2022

Share on FacebookShare on TwitterShare on LinkedInShare

Hire the best candidates with TestGorilla.

Create pre-employment assessments in minutes to screen candidates, save time, and hire the best talent.

The best advice in pre-employment testing, in your inbox.

No spam. Unsubscribe at any time.

TestGorilla Logo

Hire the best. No bias. No stress.

Our screening tests identify the best candidates and make your hiring decisions faster, easier, and bias-free.

Free resources

Anti-cheating checklist

This checklist covers key features you should look for when choosing a skills testing platform


Onboarding checklist

This resource will help you develop an onboarding checklist for new hires.


How to find candidates with strong attention to detail

How to assess your candidates' attention to detail.


How to get HR certified

Learn how to get human resources certified through HRCI or SHRM.


Improve quality of hire

Learn how you can improve the level of talent at your company.


Case study: How CapitalT reduces hiring bias

Learn how CapitalT reduced hiring bias with online skills assessments.

Case study

Resume screening guide

Learn how to make the resume process more efficient and more effective.


Important recruitment metrics

Improve your hiring strategy with these 7 critical recruitment metrics.


Case study: How Sukhi reduces shortlisting time

Learn how Sukhi decreased time spent reviewing resumes by 83%!

Case study

12 pre-employment testing hacks

Hire more efficiently with these hacks that 99% of recruiters aren't using.


The benefits of diversity

Make a business case for diversity and inclusion initiatives with this data.