C Programming Interview Questions
C Programming Interview Questions
1) What is C language?
C is a mid-level and procedural programming language. The Procedural
programming language is also known as the structured programming language is a
technique in which large programs are broken down into smaller modules, and each
module uses structured code. This technique minimizes error and misinterpretation.
scanf(): The scanf() function is used to take input from the user.
8) What is the difference between the local
variable and global variable in C?
Following are the differences between a local variable and global variable:
Life Life of a variable is created when the Life of a variable exists until the
function block is entered and program is executing.
destroyed on its exit.
Storage Variables are stored in a stack unless The compiler decides the storage
specified. location of a variable.
o A variable which is declared as static is known as a static variable. The static variable
retains its value between multiple function calls.
o Static variables are used because the scope of the static variable is available in the
entire program. So, we can access a static variable anywhere in the program.
o The static variable is initially initialized to zero. If we update the value of a variable,
then the updated value is assigned.
o The static variable is used as a common value which is shared by all the methods.
o The static variable is initialized only once in the memory heap to reduce the memory
usage
o C functions are used to avoid the rewriting the same code again and again in our
program.
o C functions can be called any number of times from any place of our program.
o When a program is divided into functions, then any part of our program can easily be
tracked.
o C functions provide the reusability concept, i.e., it breaks the big task into smaller
tasks so that it makes the C program more understandable.
Description When a copy of the value is passed to When a copy of the value is passed
the function, then the original value is to the function, then the original
not modified. value is modified.
Safety In this case, actual arguments remain In this case, actual arguments are not
safe as they cannot be modified. reliable, as they are modified.
Arguments The copies of the actual arguments The addresses of actual arguments
are passed to the formal arguments. are passed to their respective formal
arguments.
Following are the differences between a call by value and call by reference are:
1. #include <stdio.h>
2. void change(int,int);
3. int main()
4. {
5. int a=10,b=20;
6. change(a,b); //calling a function by passing the values of variables.
7. printf("Value of a is: %d",a);
8. printf("\n");
9. printf("Value of b is: %d",b);
10. return 0;
11. }
12. void change(int x,int y)
13. {
14. x=13;
15. y=17;
16. }
Output:
Value of a is: 10
Value of b is: 20
1. #include <stdio.h>
2. void change(int*,int*);
3. int main()
4. {
5. int a=10,b=20;
6. change(&a,&b); // calling a function by passing references of variables.
7. printf("Value of a is: %d",a);
8. printf("\n");
9. printf("Value of b is: %d",b);
10. return 0;
11. }
12. void change(int *x,int *y)
13. {
14. *x=13;
15. *y=17;
16. }
Output:
Value of a is: 13
Value of b is: 17
1. Winding phase
2. Unwinding phase
Winding phase: When the recursive function calls itself, and this phase ends when
the condition is reached.
Unwinding phase: Unwinding phase starts when the condition is reached, and the
control returns to the original call.
Example of recursion
1. #include <stdio.h>
2. int calculate_fact(int);
3. int main()
4. {
5. int n=5,f;
6. f=calculate_fact(n); // calling a function
7. printf("factorial of a number is %d",f);
8. return 0;
9. }
10. int calculate_fact(int a)
11. {
12. if(a==1)
13. {
14. return 1;
15. }
16. else
17. return a*calculate_fact(a-1); //calling a function recursively.
18. }
Output:
Syntax:
1. data_type array_name[size];
o Multidimensional array: Multidimensional array is an array that contains more than
one array.
Syntax:
1. data_type array_name[size];
Example of an array:
1. #include <stdio.h>
2. int main()
3. {
4. int arr[5]={1,2,3,4,5}; //an array consists of five integer values.
5. for(int i=0;i<5;i++)
6. {
7. printf("%d ",arr[i]);
8. }
9. return 0;
10. }
Output:
1 2 3 4 5
For example:
1. Data_type *p;
The above syntax tells that p is a pointer variable that holds the address number of a
given data type value.
Example of pointer
1. #include <stdio.h>
2. int main()
3. {
4. int *p; //pointer of type integer.
5. int a=5;
6. p=&a;
7. printf("Address value of 'a' variable is %u",p);
8. return 0;
9. }
Output:
1. #include<stdio.h>
2. void main()
3. {
4. int *ptr = malloc(constant value); //allocating a memory space.
5. free(ptr); //ptr becomes a dangling pointer.
6. }
In the above example, initially memory is allocated to the pointer variable ptr, and
then the memory is deallocated from the pointer variable. Now, pointer variable, i.e.,
ptr becomes a dangling pointer.
1. #include<stdio.h>
2. void main()
3. {
4. int *ptr = malloc(constant value); //allocating a memory space.
5. free(ptr); //ptr becomes a dangling pointer.
6. ptr=NULL; //Now, ptr is no longer a dangling pointer.
7. }
In the above example, after deallocating the memory from a pointer variable, ptr is
assigned to a NULL value. This means that ptr does not point to any memory
location. Therefore, it is no longer a dangling pointer.
In the above example, pptr is a double pointer pointing to the address of the ptr
variable and ptr points to the address of 'a' variable.
More details.
1. For example:
2. int a[10];
The above example creates an array of integer type, and the size of an array is fixed,
i.e., 10.
21) What is dynamic memory allocation?
o In case of dynamic memory allocation, memory is allocated at runtime and memory
can be increased while executing the program. It is used in the linked list.
o The malloc() or calloc() function is required to allocate the memory at the runtime.
o An allocation or deallocation of memory is done at the execution time of a program.
o No dynamic pointers are required to access the memory.
o The dynamic memory is implemented using data segments.
o Less memory space is required to store the variable.
1. For example
2. int *p= malloc(sizeof(int)*10);
The above example allocates the memory at runtime.
Syntax
o The calloc() is same as malloc() function, but the difference only is that it
initializes the memory with zero value.
Syntax
o The realloc() function is used to reallocate the memory to the new size.
o If sufficient space is not available in the memory, then the new block is
allocated to accommodate the existing data.
Syntax
1. ptr = realloc(ptr, newsize); // updating the memory size using realloc() function.
2. free():The free() function releases the memory allocated by either calloc() or malloc()
function.
Syntax
The above syntax releases the memory from a pointer variable ptr.
Description The malloc() function allocates a single The calloc() function allocates multiple
block of requested memory. blocks of requested memory.
Initialization It initializes the content of the memory It does not initialize the content of
to zero. memory, so it carries the garbage value.
Return value It returns a pointer pointing to the It returns a pointer pointing to the
allocated memory. allocated memory.
24) What is the structure?
o The structure is a user-defined data type that allows storing multiple types of data in
a single unit. It occupies the sum of the memory of all members.
o The structure members can be accessed only through structure variables.
o Structure variables accessing the same structure but the memory allocated for each
variable will be different.
Syntax of structure
1. struct structure_name
2. {
3. Member_variable1;
4. Member_variable2
5. .
6. .
7. }[structure variables];
1. #include <stdio.h>
2. struct student
3. {
4. char name[10]; // structure members declaration.
5. int age;
6. }s1; //structure variable
7. int main()
8. {
9. printf("Enter the name");
10. scanf("%s",s1.name);
11. printf("\n");
12. printf("Enter the age");
13. scanf("%d",&s1.age);
14. printf("\n");
15. printf("Name and age of a student: %s,%d",s1.name,s1.age);
16. return 0;
17. }
Output:
Enter the name shikha
Enter the age 26
Name and age of a student: shikha,26
Syntax of union
1. union union_name
2. {
3. Member_variable1;
4. Member_variable2;
5. .
6. .
7. Member_variable n;
8. }[union variables];
1. #include<stdio.h>
2. union data
3. {
4. int a; //union members declaration.
5. float b;
6. char ch;
7. };
8. int main()
9. {
10. union data d; //union variable.
11. d.a=3;
12. d.b=5.6;
13. d.ch='a';
14. printf("value of a is %d",d.a);
15. printf("\n");
16. printf("value of b is %f",d.b);
17. printf("\n");
18. printf("value of ch is %c",d.ch);
19. return 0;
20. }
Output:
value of a is 1085485921
value of b is 5.600022
value of ch is a
In the above example, the value of a and b gets corrupted, and only variable ch
shows the actual output. This is because all the members of a union share the
common memory space. Hence, the variable ch whose value is currently updated.
Syntax
1. #include<stdio.h>
2. int main()
3. {
4. char a[20];
5. int n=sprintf(a,"javaToint");
6. printf("value of n is %d",n);
7. return 0;}
Output:
value of n is 9
But, if we use #define, we can compile and run a C program without using the main()
function. For example:
1. #include<stdio.h>
2. #define start main
3. void start() {
4. printf("Hello");
5. }
The getche() function reads a single character from the keyword, but data is
displayed on the output screen. Press Alt+f5 to see the entered character.
1. #include<stdio.h>
2. #include<conio.h>
3. int main()
4. {
5.
6. char ch;
7. printf("Enter a character ");
8. ch=getch(); // taking an user input without printing the value.
9. printf("\nvalue of ch is %c",ch);
10. printf("\nEnter a character again ");
11. ch=getche(); // taking an user input and then displaying it on the screen.
12. printf("\nvalue of ch is %c",ch);
13. return 0;
14. }
Output:
Enter a character
value of ch is a
Enter a character again a
value of ch is a
In the above example, the value entered through a getch() function is not displayed
on the screen while the value entered through a getche() function is displayed on the
screen.
A near pointer doesn't have explicit selector whereas far, and huge pointers have
explicit selector. When you perform pointer arithmetic on the far pointer, the selector
is not modified, but in case of a huge pointer, it can be modified.
These are the non-standard keywords and implementation specific. These are
irrelevant in a modern platform.
Syntax
1. (type_name) expression;
1. for(;;){
2. //code to be executed
3. }
1. while(1){
2. //code to be executed
3. }
Infinite Do-While Loop:
1. do{
2. //code to be executed
3. }while(1);