C73. C All Interview Questions


C- Questions

  1. What does static variable mean?
  2. What is a pointer?
  3. What is a structure?
  4. What are the differences between structures and arrays?
  5. In header files whether functions are declared or defined? 
  6. What are the differences between malloc() and calloc()?
  7. What are macros? what are its advantages and disadvantages?
  8. Difference between pass by reference and pass by value?
  9. What is static identifier?
  10. Where are the auto variables stored?
  11. Where does global, static, local, register variables, free memory and C Program instructions get stored?
  12. Difference between arrays and linked list?
  13. What are enumerations?
  14. Describe about storage allocation and scope of global, extern, static, local and register variables?
  15. What are register variables? What are the advantage of using register variables?
  16. What is the use of typedef?
  17. Can we specify variable field width in a scanf() format string? If possible how?
  18. Out of fgets() and gets() which function is safe to use and why?
  19. Difference between strdup and strcpy?
  20. What is recursion?
  21. Differentiate between a for loop and a while loop? What are it uses?
  22. What are the different storage classes in C?
  23. Write down the equivalent pointer expression for referring the same element a[i][j][k][l]?
  24. What is difference between Structure and Unions?
  25. What the advantages of using Unions?
  26. What are the advantages of using pointers in a program?
  27. What is the difference between Strings and Arrays?
  28. In a header file whether functions are declared or defined?
  29. What is a far pointer? where we use it?
  30. How will you declare an array of three function pointers where each function receives two ints and returns a float?
  31. what is a NULL Pointer? Whether it is same as an uninitialized pointer?
  32. What is a NULL Macro? What is the difference between a NULL Pointer and a NULL Macro?
  33. What does the error 'Null Pointer Assignment' mean and what causes this error?
  34. What is near, far and huge pointers? How many bytes are occupied by them?
  35. How would you obtain segment and offset addresses from a far address of a memory location?
  36. Are the expressions arr and &arr same for an array of integers?
  37. Does mentioning the array name gives the base address in all the contexts?
  38. Explain one method to process an entire string as one unit?
  39. What is the similarity between a Structure, Union and enumeration?
  40. Can a Structure contain a Pointer to itself?
  41. How can we check whether the contents of two structure variables are same or not?
  42. How are Structure passing and returning implemented by the complier?
  43. How can we read/write Structures from/to data files?
  44. What is the difference between an enumeration and a set of pre-processor # defines?
  45. what do the 'c' and 'v' in argc and argv stand for?
  46. Are the variables argc and argv are local to main?
  47. What is the maximum combined length of command line arguments including the space between adjacent arguments?
  48. If we want that any wildcard characters in the command line arguments should be appropriately expanded, are we required to make any special provision? If yes, which?
  49. Does there exist any way to make the command line arguments available to other functions without passing them as arguments to the function?
  50. What are bit fields? What is the use of bit fields in a Structure declaration?
  51. To which numbering system can the binary number 1101100100111100 be easily converted to?
  52. Which bit wise operator is suitable for checking whether a particular bit is on or off?
  53. Which bit wise operator is suitable for turning off a particular bit in a number?
  54. Which bit wise operator is suitable for putting on a particular bit in a number?
  55. Which bit wise operator is suitable for checking whether a particular bit is on or off?
  56. which one is equivalent to multiplying by 2:Left shifting a number by 1 or Left shifting an unsigned int or char by 1?
  57. Write a program to compare two strings without using the strcmp() function.
  58. Write a program to concatenate two strings.
  59. Write a program to interchange 2 variables without using the third one.
  60. Write programs for String Reversal & Palindrome check
  61. Write a program to find the Factorial of a number
  62. Write a program to generate the Fibinocci Series
  63. Write a program which employs Recursion
  64. Write a program which uses Command Line Arguments
  65. Write a program which uses functions like strcmp(), strcpy()? etc
  66. What are the advantages of using typedef in a program?
  67. How would you dynamically allocate a one-dimensional and two-dimensional array of integers?
  68. How can you increase the size of a dynamically allocated array?
  69. How can you increase the size of a statically allocated array?
  70. When reallocating memory if any other pointers point into the same piece of memory do you have to readjust these other pointers or do they get readjusted automatically?
  71. Which function should be used to free the memory allocated by calloc()?
  72. How much maximum can you allocate in a single call to malloc()?
  73. Can you dynamically allocate arrays in expanded memory?
  74. What is object file? How can you access object file?
  75. Which header file should you include if you are to develop a function which can accept variable number of arguments?
  76. Can you write a function similar to printf()?
  77. How can a called function determine the number of arguments that have been passed to it?
  78. Can there be at least some solution to determine the number of arguments passed to a variable argument list function?
  79. How do you declare the following:
80.  An array of three pointers to chars
81.  An array of three char pointers
A pointer to array of three chars
A pointer to function which receives an int pointer and returns a float pointer A pointer to a function which receives nothing and returns nothing
  1. What do the functions atoi(), itoa() and gcvt() do?
  2. Does there exist any other function which can be used to convert an integer or a float to a string?
  3. How would you use qsort() function to sort an array of structures?
  4. How would you use qsort() function to sort the name stored in an array of pointers to string?
  5. How would you use bsearch() function to search a name stored in array of pointers to string?
  6. How would you use the functions sin(), pow(), sqrt()?
  7. How would you use the functions memcpy(), memset(), memmove()?
  8. How would you use the functions fseek(), freed(), fwrite() and ftell()?
  9. How would you obtain the current time and difference between two times?
  10. How would you use the functions randomize() and random()?
  11. How would you implement a substr() function that extracts a sub string from a given string?
  12. What is the difference between the functions rand(), random(), srand() and randomize()?
  13. What is the difference between the functions memmove() and memcpy()?
  14. How do you print a string on the printer?
  15. Can you use the function fprintf() to display the output on the screen?






C++- Questions 
 
  1. What is a class?
  2. What is an object?
  3. What is the difference between an object and a class?
  4. What is the difference between class and structure?
  5. What is public, protected, private?
  6. What are virtual functions?
  7. What is friend function?
  8. What is a scope resolution operator?
  9. What do you mean by inheritance?
  10. What is abstraction?
  11. What is polymorphism? Explain with an example.
  12. What is encapsulation?
  13. What do you mean by binding of data and functions?
  14. What is function overloading and operator overloading?
  15. What is virtual class and friend class?
  16. What do you mean by inline function?
  17. What do you mean by public, private, protected and friendly?
  18. When is an object created and what is its lifetime?
  19. What do you mean by multiple inheritance and multilevel inheritance? Differentiate between them.
  20. Difference between realloc() and free?
  21. What is a template?
  22. What are the main differences between procedure oriented languages and object oriented languages?
  23. What is R T T I ?
  24. What are generic functions and generic classes?
  25. What is namespace?
  26. What is the difference between pass by reference and pass by value?
  27. Why do we use virtual functions?
  28. What do you mean by pure virtual functions?
  29. What are virtual classes?
  30. Does c++ support multilevel and multiple inheritance?
  31. What are the advantages of inheritance?
  32. When is a memory allocated to a class?
  33. What is the difference between declaration and definition?
  34. What is virtual constructors/destructors?
  35. In c++ there is only virtual destructors, no constructors. Why?
  36. What is late bound function call and early bound function call? Differentiate.
  37. How is exception handling carried out in c++?
  38. When will a constructor executed?
  39. What is Dynamic Polymorphism?
  40. Write a macro for swapping integers.


C-QUESTIONS

1. Declarations and Initializations

1.1 How do you decide which integer type to use?
1.4 What should the 64-bit type on new, 64-bit machines be?
1.7 What's the best way to declare and define global variables?
1.11 What does extern mean in a function declaration?
1.12 What's the auto keyword good for?
1.14 I can't seem to define a linked list node, which contains a pointer to it.
1.21 How do I declare an array of N pointers to functions returning pointers to functions returning pointers to characters?
1.22 How can I declare a function that returns a pointer to a function of its own type?
1.25 My compiler is complaining about an invalid redeclaration of a function, but I only define it once and call it once.
1.30 What can I safely assume about the initial values of variables, which are not explicitly initialized?
1.31 Why can't I initialize a local array with a string?
1.32 What is the difference between char a[] = "string"; and char *p = "string"; ?
1.34 How do I initialize a pointer to a function?

2. Structures, Unions, and Enumerations

2.1 What's the difference between struct x1 {...}; and typedef struct {...} x2;?
2.2 Why doesn't "struct x {...}; x the struct;" work?
2.3 Can a structure contain a pointer to itself?
2.4 What's the best way of implementing opaque (abstract) data types in C?
2.6 I came across some code that declared a structure with the last member an array of one element, and then did some tricky allocation to make it act like the array had several elements. Is this legal or portable?
2.7 I heard that structures could be assigned to variables and passed to and from functions, but K&R1 says not.
2.8 Why can't you compare structures?
2.9 How are structure passing and returning implemented?
2.10 Can I pass constant values to functions, which accept structure arguments?
2.11 How can I read/write structures from/to data files?
2.12 How can I turn off structure padding?
2.13 Why does size of report a larger size than I expect for a structure type?
2.14 How can I determine the byte offset of a field within a structure?
2.15 How can I access structure fields by name at run time?
2.18 I have a program, which works correctly, but dumps core after it finishes. Why?
2.20 Can I initialize unions?
2.22 What is the difference between an enumeration and a set of preprocessor #defines?
2.24 Is there an easy way to print enumeration values symbolically?

3. Expressions
3.1 Why doesn't the code "a [i] = i++;" work?
3.2 Under my compiler, the code "int i = 7; printf ("%d\n", i++ * i++);" prints 49. Regardless of the order of evaluation, shouldn't it print 56?
3.3 How could the code [CENSORED] ever give 7?
3.4 Don't precedence and parentheses dictate order of evaluation?
3.5 But what about the && and || operators?
3.8 What's a ``sequence point''?
3.9 So given "a [i] = i++;" we don't know which cell of a[] gets written to, but i does get incremented by one.
3.12 If I'm not using the value of the expression, should I use i++ or ++i to increment a variable?
3.14 Why doesn't the code "int a = 1000, b = 1000; long int c = a * b;" work?
3.16 Can I use ?: on the left-hand side of an assignment expression?

4. Pointers

4.2 What's wrong with "char *p; *p = malloc (10);"?
4.3 Does *p++ increment p, or what it points to?
4.5 I want to use a char * pointer to step over some ints. Why doesn't "((int *) p)++;" work?
4.8 I have a function, which accepts, and is supposed to initialize, a pointer, but the pointer in the caller remains unchanged.
4.9 Can I use a void ** pointer to pass a generic pointer to a function by reference?
4.10 I have a function, which accepts a pointer to an int. How can I pass a constant like 5 to it?
4.11 Does C even have ``pass by reference''?
4.12 I've seen different methods used for calling functions via pointers.

5. Null Pointers

5.1 What is this infamous null pointer, anyway?
5.2 How do I get a null pointer in my programs?
5.3 Is the abbreviated pointer comparison ``if (p)'' to test for non-null pointers valid?
5.4 What is NULL and how is it #defined?
5.5 How should NULL be defined on a machine, which uses a nonzero bit pattern as the internal representation of a null pointer?
5.6 If NULL were defined as ``((char *) 0),'' wouldn't that make function calls which pass an uncast NULL work?
5.9 If NULL and 0 are equivalent as null pointer constants, which should I use?
5.10 But wouldn't it be better to use NULL, in case the value of NULL changes?
5.12 I use the preprocessor macro "#define Nullptr (type) (type *) 0" to help me build null pointers of the correct type.
5.13 This is strange. NULL is guaranteed to be 0, but the null pointer is not?
5.14 Why is there so much confusion surrounding null pointers?
5.15 I'm confused. I just can't understand all this null pointer stuff.
5.16 Given all the confusion surrounding null pointers, wouldn't it be easier simply to require them to be represented internally by zeroes?
5.17 Seriously, have any actual machines really used nonzero null pointers?
5.20 What does a run-time ``null pointer assignment'' error mean?

6. Arrays and Pointers

6.1 I had the definition char a [6] in one source file, and in another I declared extern char *a. Why didn't it work?
6.2 But I heard that char a[] was identical to char *a.
6.3 So what is meant by the ``equivalence of pointers and arrays'' in C?
6.4 Why are array and pointer declarations interchangeable as function formal parameters?
6.7 How can an array be an lvalue, if you can't assign to it?
6.8 What is the real difference between arrays and pointers?
6.9 Someone explained to me that arrays were really just constant pointers.
6.11 I came across some ``joke'' code containing the ``expression'' 5["abcdef"]. How can this be legal C?
6.12 What's the difference between array and &array?
6.13 How do I declare a pointer to an array?
6.14 How can I set an array's size at compile time?
6.15 How can I declare local arrays of a size matching a passed-in array?
6.16 How can I dynamically allocate a multidimensional array?
6.17 Can I simulate a non-0-based array with a pointer?
6.18 My compiler complained when I passed a two-dimensional array to a function expecting a pointer to a pointer.
6.19 How do I write functions, which accept two-dimensional arrays when the ``width'' is not known at compile time?
6.20 How can I use statically- and dynamically-allocated multidimensional arrays interchangeably when passing them to functions?
6.21 Why doesn't size of properly report the size of an array, which is a parameter to a function?

7. Memory Allocation

7.1 Why doesn't the code ``char *answer; gets (answer);'' work?
7.2 I can't get strcat to work. I tried ``char *s3 = strcat (s1, s2);'' but I got strange results.
7.3 But the man page for strcat says that it takes two char *'s as arguments. How am I supposed to know to allocate things?
7.5 I have a function that is supposed to return a string, but when it returns to its caller, the returned string is garbage.
7.6 Why am I getting ``warning: assignment of pointer from integer lacks a cast'' for calls to malloc?
: wq
7.7 Why does some code carefully cast the values returned by malloc to the pointer type being allocated?
7.8 Why does so much code leave out the multiplication by sizeof (char) when allocating strings?
7.14 I've heard that some operating systems don't actually allocate malloc'ed memory until the program tries to use it. Is this legal?
7.16 I'm allocating a large array for some numeric work, but malloc is acting strangely.
7.17 I've got 8 meg of memory in my PC. Why can I only seem to malloc 640K or so?
7.19 My program is crashing, apparently somewhere down inside malloc.
7.20 You can't use dynamically allocated memory after you free it, can you?
7.21 Why isn't a pointer null after calling free?
7.22 When I call malloc to allocate memory for a local pointer, do I have to explicitly free it?
7.23 When I free a dynamically allocated structure containing pointers, do I have to free each subsidiary pointer first?
7.24 Must I free allocated memory before the program exits?
7.25 Why doesn't my program's memory usage go down when I free memory?
7.26 How does free know how many bytes to free?
7.27 So can I query the malloc package to find out how big an allocated block is?
7.30 Is it legal to pass a null pointer as the first argument to realloc?
7.31 What's the difference between calloc and malloc?
7.32 What is alloca and why is its use discouraged?

8. Characters and Strings

8.1 Why doesn't "strcat (string, '!');" work?
8.2 Why won't the test if (string == "value") correctly compare string against the value?
8.3 Why can't I assign strings to character arrays?
8.6 How can I get the numeric (character set) value corresponding to a character?
8.9 Why is sizeof ('a') not 1?

9. Boolean Expressions and Variables

9.1 What is the right type to use for Boolean values in C?
9.2 What if a built-in logical or relational operator ``returns'' something other than 1?
9.3 Is if (p), where p is a pointer, valid?

10. C Preprocessor

10.2 I've got some cute preprocessor macros that let me write C code that looks more like Pascal. What do y'all think?
10.3 How can I write a generic macro to swap two values?
10.4 What's the best way to write a multi-statement macro?
10.6 What are .h files and what should I put in them?
10.7 Is it acceptable for one header file to #include another?
10.8 Where are header (``#include'') files searched for?
10.9 I'm getting strange syntax errors on the very first declaration in a file, but it looks fine.
10.11 Where can I get a copy of a missing header file?
10.12 How can I construct preprocessor #if expressions which compare strings?
10.13 Does the sizeof operator work in preprocessor #if directives?
10.14 Can I use an #ifdef in a #define line, to define something two different ways?
10.15 Is there anything like an #ifdef for typedefs?
10.16 How can I use a preprocessor #if expression to detect endianness?
10.18 How can I preprocess some code to remove selected conditional compilations, without preprocessing everything?
10.19 How can I list all of the pre#defined identifiers?
10.20 I have some old code that tries to construct identifiers with a macro like "#define Paste (a, b) a/**/b", but it doesn't work any more.
10.22 What does the message ``warning: macro replacement within a string literal'' mean?
10.23 How can I use a macro argument inside a string literal in the macro expansion?
10.25 I've got this tricky preprocessing I want to do and I can't figure out a way to do it.
10.26 How can I write a macro, which takes a variable number of arguments?

11. ANSI/ISO Standard C

11.1 What is the ``ANSI C Standard?''
11.2 How can I get a copy of the Standard?
11.3 My ANSI compiler is complaining about prototype mismatches for parameters declared float.
11.4 Can you mix old-style and new-style function syntax?
11.5 Why does the declaration "extern f(struct x *p);" give me a warning message?
11.8 Why can't I use const values in initializers and array dimensions?
11.9 What's the difference between const char *p and char * const p?
11.10 Why can't I pass a char ** to a function which expects a const char **?
11.12 Can I declare main as void, to shut off these annoying ``main returns no value'' messages?
11.13 But what about main's third argument, envp?
11.14 I believe that declaring void main () can't fail, since I'm calling exit instead of returning.
11.15 The book I've been using always uses void main ().
11.16 Is exit (status) truly equivalent to returning the same status from main?
11.17 How do I get the ANSI ``stringizing'' preprocessing operator `#' to stringize the macro's value instead of its name?
11.18 What does the message ``warning: macro replacement within a string literal'' mean?
11.19 I'm getting strange syntax errors inside lines I've #ifdeffed out.
11.20 What are #pragmas?
-- pre 11.21 What does ``#pragma once'' mean?
11.22 Is char a[3] = "abc"; legal?
11.24 Why can't I perform arithmetic on a void * pointer?
11.25 What's the difference between memcpy and memmove?
11.26 What should malloc (0) do?
11.27 Why does the ANSI Standard not guarantee more than six case-insensitive characters of external identifier significance?
11.29 My compiler is rejecting the simplest possible test programs, with all kinds of syntax errors.
11.30 Why are some ANSI/ISO Standard library routines showing up as undefined, even though I've got an ANSI compiler?
11.31 Does anyone have a tool for converting old-style C programs to ANSI C, or for automatically generating prototypes?
11.32 Why won't frobozz-cc, which claims to be ANSI compliant, accept this code?
11.33 What's the difference between implementation-defined, unspecified, and undefined behavior?
11.34 I'm appalled that the ANSI Standard leaves so many issues undefined.
11.35 I just tried some allegedly-undefined code on an ANSI-conforming compiler, and got the results I expected.

12. Stdio

12.1 What's wrong with the code "char c; while ((c = getchar ())! = EOF)..."?
12.2 Why won't the code `` while (! feof (infp)) {fgets (buf, MAXLINE, infp); fputs (buf, outfp);} '' work?
12.4 My program's prompts and intermediate output don't always show up on the screen.
12.5 How can I read one character at a time, without waiting for the RETURN key?
12.6 How can I print a '%' character with printf?
12.9 How can printf use %f for type double, if scanf requires %lf?
12.10 How can I implement a variable field width with printf?
12.11 How can I print numbers with commas separating the thousands?
12.12 Why doesn't the call scanf ("%d", i) work?
12.13 Why doesn't the code "double d; scanf ("%f", &d);" work?
12.15 How can I specify a variable width in a scanf format string?
12.17 When I read numbers from the keyboard with scanf "%d\n", it seems to hang until I type one extra line of input.
12.18 I'm reading a number with scanf %d and then a string with gets (), but the compiler seems to be skipping the call to gets ()!
12.19 I'm re-prompting the user if scanf fails, but sometimes it seems to go into an infinite loop.
12.20 Why does everyone say not to use scanf? What should I use instead?
12.21 How can I tell how much destination buffer space I'll need for an arbitrary sprintf call? How can I avoid overflowing the destination buffer with sprintf?
12.23 Why does everyone say not to use gets ()?
12.24 Why does errno contain ENOTTY after a call to printf?
12.25 What's the difference between fgetpos/fsetpos and ftell/fseek?
12.26 Will fflush (stdin) flush unread characters from the standard input stream?
12.30 I'm trying to update a file in place, by using fopen mode "r+", but it's not working.
12.33 How can I redirect stdin or stdout from within a program?
12.34 Once I've used freopen, how can I get the original stream back?
12.38 How can I read a binary data file properly?
13. Library Functions

13.1 How can I convert numbers to strings?
13.2 Why does strncpy not always write a '\0'?
13.5 Why do some versions of toupper act strangely if given an upper-case letter?
13.6 How can I split up a string into whitespace-separated fields?
13.7 I need some code to do regular expression and wildcard matching.
13.8 I'm trying to sort an array of strings with qsort, using strcmp as the comparison function, but it's not working.
13.9 Now I'm trying to sort an array of structures, but the compiler is complaining that the function is of the wrong type for qsort.
13.10 How can I sort a linked list?
13.11 How can I sort more data than will fit in memory?
13.12 How can I get the time of day in a C program?
13.13 How can I convert a struct tm or a string into a time_t?
13.14 How can I perform calendar manipulations?
13.15 I need a random number generator.
13.16 How can I get random integers in a certain range?
13.17 Each time I run my program, I get the same sequence of numbers back from rand ().
13.18 I need a random true/false value, so I'm just taking rand () % 2, but it's alternating 0, 1, 0, 1, 0...
13.20 How can I generate random numbers with a normal or Gaussian distribution?
13.24 I'm trying to port this old program. Why do I get ``undefined external'' errors for some library functions?
13.25 I get errors due to library functions being undefined even though I #include the right header files.
13.26 I'm still getting errors due to library functions being undefined, even though I'm requesting the right libraries.
13.28 What does it mean when the linker says that _end is undefined?

14. Floating Point

14.1 When I set a float variable to 3.1, why is printf printing it as 3.0999999?
14.2 Why is sqrt (144.) giving me crazy numbers?
14.3 I keep getting ``undefined: sin'' compilation errors.
14.4 My floating-point calculations are acting strangely and giving me different answers on different machines.
14.5 What's a good way to check for ``close enough'' floating-point equality?
14.6 How do I round numbers?
14.7 Where is C's exponentiation operator?
14.8 The pre-#defined constant M_PI seems to be missing from <math.h>.
14.9 How do I test for IEEE NaN and other special values?
14.11 What's a good way to implement complex numbers in C?
14.12 I'm looking for some mathematical library code.
14.13 I'm having trouble with a Turbo C program, which crashes and says something like ``floating point formats not linked.''

15. Variable-Length Argument Lists

15.1 I heard that you have to #include <stdio.h> before calling printf. Why?
15.2 How can %f be used for both float and double arguments in printf?
15.3 Why don't function prototypes guard against mismatches in printf's arguments?
15.4 How can I write a function that takes a variable number of arguments?
15.5 How can I write a function that takes a format string and a variable number of arguments, like printf, and passes them to printf to do most of the work?
15.6 How can I write a function analogous to scanf that calls scanf to do most of the work?
15.7 I have a pre-ANSI compiler, without <stdarg.h>. What can I do?
15.8 How can I discover how many arguments a function was actually called with?
15.9 My compiler isn't letting me declare a function that accepts only variable arguments.
15.10 Why isn't "va_arg (argp, float)" working?
15.11 I can't get va_arg to pull in an argument of type pointer-to-function.
15.12 How can I write a function, which takes a variable number of arguments and passes them to some other function?
15.13 How can I call a function with an argument list built up at run time?

16. Strange Problems

16.3 This program crashes before it even runs!
16.4 I have a program that seems to run correctly, but then crashes as it's exiting.
16.5 This program runs perfectly on one machine, but I get weird results on another.
16.6 Why does the code "char *p = "hello, world!"; p[0] = 'H';" crash?
16.8 What does ``Segmentation violation'' mean?

17. Style

17.1 What's the best style for code layout in C?
17.3 Is the code "if (! strcmp (s1, s2))" good style?
17.4 Why do some people write if (0 == x) instead of if (x == 0)?
17.5 I came across some code that puts a (void) cast before each call to printf. Why?
17.8 What is Hungarian Notation''? Is it worthwhile?
17.9 Where can I get the ``Indian Hill Style Guide'' and other coding standards?
17.10 Some people say that goto's are evil and that I should never use them. Isn't that a bit extreme?

18. Tools and Resources

18.1 I'm looking for C development tools (cross-reference generators, code beautifiers, etc.).
18.2 How can I track down these pesky malloc problems?
18.3 What's a free or cheap C compiler I can use?
18.4 I just typed in this program, and it's acting strangely. Can you see anything wrong with it?
18.5 How can I shut off the ``warning: possible pointer alignment problem'' message which lint gives me for each call to malloc?
18.7 Where can I get an ANSI-compatible lint?
18.8 Don't ANSI function prototypes render lint obsolete?
18.9 Are there any C tutorials or other resources on the net?
18.10 What's a good book for learning C?
18.13 Where can I find the sources of the standard C libraries?
18.14 I need code to parse and evaluate expressions.
18.15 Where can I get a BNF or YACC grammar for C?
18.15a Does anyone have a C compiler test suite I can use?
18.16 Where and how can I get copies of all these freely distributable programs?

19. System Dependencies

19.1 How can I read a single character from the keyboard without waiting for the RETURN key?
19.2 How can I find out how many characters are available for reading, or do a non-blocking read?
19.3 How can I display a percentage-done indication that updates itself in place, or show one of those ``twirling baton'' progress indicators?
19.4 How can I clear the screen, or print things in inverse video, or move the cursor?
19.5 How do I read the arrow keys? What about function keys?
19.6 How do I read the mouse?
19.7 How can I do serial (``comm'') port I/O?
19.8 How can I direct output to the printer?
19.9 How do I send escape sequences to control a terminal or other device?
19.10 How can I do graphics?
19.11 How can I check whether a file exists?
19.12 How can I find out the size of a file, prior to reading it in?
19.13 How can a file be shortened in-place without completely clearing or rewriting it?
19.14 How can I insert or delete a line in the middle of a file?
19.15 How can I recover the file name given an open file descriptor?
19.16 How can I delete a file?
19.17 What's wrong with the call "fopen ("c:\newdir\file.dat", "r")"?
19.18 How can I increase the allowable number of simultaneously open files?
19.20 How can I read a directory in a C program?
19.22 How can I find out how much memory is available?
19.23 How can I allocate arrays or structures bigger than 64K?
19.24 What does the error message ``DGROUP exceeds 64K'' mean?
19.25 How can I access memory located at a certain address?
19.27 How can I invoke another program from within a C program?
19.30 How can I invoke another program and trap its output?
19.31 How can my program discover the complete pathname to the executable from which it was invoked?
19.32 How can I automatically locate a program's configuration files in the same directory as the executable?
19.33 How can a process change an environment variable in its caller?
19.36 How can I read in an object file and jump to routines in it?
19.37 How can I implement a delay, or time a user's response, with sub-second resolution?
19.38 How can I trap or ignore keyboard interrupts like control-C?
19.39 How can I handle floating-point exceptions gracefully?
19.40 How do I... Use sockets? Do networking? Write client/server applications?
19.40b How do I use BIOS calls? How can I write ISR's? How can I create TSR's?
19.41 But I can't use all these nonstandard, system-dependent functions, because my program has to be ANSI compatible!

20. Miscellaneous

20.1 How can I return multiple values from a function?
20.3 How do I access command-line arguments?
20.5 How can I write data files, which can be read on other machines with different data formats?
20.6 How can I call a function, given its name as a string?
20.8 How can I implement sets or arrays of bits?
20.9 How can I determine whether a machine's byte order is big-endian or little-endian?
20.10 How can I convert integers to binary or hexadecimal?
20.11 Can I use base-2 constants (something like 0b101010)?
Is there a printf format for binary?
20.12 What is the most efficient way to count the number of bits, which are set in a value?
20.13 How can I make my code more efficient?
20.14 Are pointers really faster than arrays? How much do function calls slow things down?
20.17 Is there a way to switch on strings?
20.18 Is there a way to have non-constant case labels (i.e. ranges or arbitrary expressions)?
20.19 Are the outer parentheses in return statements really optional?
20.20 Why don't C comments nest? Are they legal inside quoted strings?
20.24 Why doesn't C have nested functions?
20.25 How can I call FORTRAN (C++, BASIC, Pascal, Ada, LISP) functions from C?
20.26 Does anyone know of a program for converting Pascal or FORTRAN to C?
20.27 Can I use a C++ compiler to compile C code?
20.28 I need to compare two strings for close, but not necessarily exact, equality.
20.29 What is hashing?
20.31 How can I find the day of the week given the date?
20.32 Will 2000 be a leap year?
20.34 How do you write a program, which produces its own source code as its output?
20.35 What is ``Duff's Device''?
20.36 When will the next Obfuscated C Code Contest be held? How can I get a copy of previous winning entries?
20.37 What was the entry keyword mentioned in K&R1?
20.38 Where does the name ``C'' comes from, anyway?
20.39 How do you pronounce ``char''?
20.40 Where can I get extra copies of this list?

C72. C Interview question and Answers


What is C language?

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. ...

What is the output of printf("%d")?

1. When we write printf("%d",x); this means compiler will print the value of x.
2. 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 what ever will be the contents of that memory location.

3. 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(...).

malloc() Function- 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.

printf() Function- What is the difference between "printf(...)" and "sprintf(...)"?

sprintf(...) writes data to the character array whereas printf(...) writes data to the standard output device.

"union" Data Type What is the output of the following program? Why?
#include
main() {
typedef union {
int a;
char b[10];
float c;
}
Union;

Union x,y = {100};
x.a = 50;
strcpy(x.b,"hello");
x.c = 21.50;
printf("Union x : %d %s %f n",x.a,x.b,x.c);
printf("Union y : %d %s %f n",y.a,y.b,y.c);
}

What will print out?
main()
{
char *p1=“name”;
char *p2;
p2=(char*)malloc(20);
memset (p2, 0, 20);
while(*p2++ = *p1++);
printf(“%s\n”,p2);
}

The pointer p2 value is also increasing with p1 .
*p2++ = *p1++ means copy value of *p1 to *p2 , then increment both addresses (p1,p2) by one , so that they can point to next address . So when the loop exits (ie when address p1 reaches next character to “name” ie null) p2 address also points to next location to “name” . When we try to print string with p2 as starting address , it will try to print string from location after “name” … hence it is null string ….

e.g. :
initially p1 = 2000 (address) , p2 = 3000
*p1 has value “n” ..after 4 increments , loop exits … at that time p1 value will be 2004 , p2 =3004 … the actual result is stored in 3000 - n , 3001 - a , 3002 - m , 3003 -e … we r trying to print from 3004 …. where no data is present … that's why its printing null .

Answer: empty string.
What will be printed as the result of the operation below:
main()
{
int x=20,y=35;
x=y++ + x++;
y= ++y + ++x;
printf(“%d%d\n”,x,y)
;
}


Answer : 5794

What will be printed as the result of the operation below:
main()
{
int x=5;
printf(“%d,%d,%d\n”,x,x<<2,>>2);
}


Answer: 5,20,1

What will be printed as the result of the operation below:

#define swap(a,b) a=a+b;b=a-b;a=a-b;
void main()
{
int x=5, y=10;
swap (x,y);
printf(“%d %d\n”,x,y);

 swap2(x,y);
printf(“%d %d\n”,x,y);

 }

int swap2(int a, int b)
{
int temp;
temp=a;
b=a;
a=temp;
return 0;
}


as x = 5 = 0×0000,0101; so x << 2 -< 0×0001,0100 = 20; x >7gt; 2 -> 0×0000,0001 = 1. Therefore, the answer is 5, 20 , 1

the correct answer is
10, 5
5, 10


Answer: 10, 5

What will be printed as the result of the operation below:
main()
{
char *ptr = ” Tech Preparation”;
*ptr++; printf(“%s\n”,ptr)
; ptr++;
printf(“%s\n”,ptr);

}

1) ptr++ increments the ptr address to point to the next address. In the previous example, ptr was pointing to the space in the string before C, now it will point to C.

2)*ptr++ gets the value at ptr++, the ptr is indirectly forwarded by one in this case.

3)(*ptr)++ actually increments the value in the ptr location. If *ptr contains a space, then (*ptr)++ will now contain an exclamation mark.

Answer: Tech Preparation

What will be printed as the result of the operation below:
main()
{
char s1[]=“Tech”;
char s2[]= “preparation”;
printf(“%s”,s1)
; }


Answer: Tech

What will be printed as the result of the operation below:
main()
{
char *p1;
char *p2;

p1=(char *)malloc(25);
p2=(char *)malloc(25);

strcpy(p1,”Tech”);
strcpy(p2,“preparation”);
strcat(p1,p2);

printf(“%s”,p1)
;
}


Answer: Techpreparation

WHat will be the result of the following code?
#define TRUE 0 // some code while(TRUE) { // some code }
This will not go into the loop as TRUE is defined as 0.
What will be printed as the result of the operation below:
int x;
int modifyvalue()
{
return(x+=10);
}

int changevalue(int x)
{
return(x+=1);
}

void main()
{
int x=10;
x++;
changevalue(x);
x++;
modifyvalue();
printf("First output:%d\n",x);

x++;
changevalue(x);
printf("Second output:%d\n",x);
modifyvalue();
printf("Third output:%d\n",x);

}



Answer: 12 , 13 , 13

What will be printed as the result of the operation below:
main()
{
int x=10, y=15;
x = x++;
y = ++y;
printf(“%d %d\n”,x,y);

}


Answer: 11, 16

What will be printed as the result of the operation below:
main()
{
int a=0;
if(a==0)
printf(“Tech Preparation\n”);
printf(“Tech Preparation\n”);

}


Answer: Two lines with “Tech Preparation” will be printed.

What will the following piece of code do
int f(unsigned int x)
{
int i;
for (i=0; x!0; x>>=1){
if (x & 0X1)
i++;
}
return i;
}


Answer: returns the number of ones in the input parameter X

What will happen in these three cases?
if(a=0){
//somecode
}
if (a==0){
//do something
}
if (a===0){
//do something
}

What are x, y, y, u
#define Atype int*
typedef int *p;
p x, z;
Atype y, u;


Answer: x and z are pointers to int. y is a pointer to int but u is just an integer variable

What does static variable mean?

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

Advantages of a macro over a function?

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))

Macros are a necessary evils of life. The purists don’t like them, but without it no real work gets done.

What are the differences between malloc() and calloc()?

There are 2 differences.
First, is in the number of arguments. malloc() takes a single argument(memory required in bytes), while calloc() needs 2 arguments(number of variables to allocate memory, size in bytes of a single variable).
Secondly, malloc() does not initialize the memory allocated, while calloc() initializes the allocated memory to ZERO.


What are the different storage classes in C?

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.


What is the difference between strings and character arrays?

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. For example, in the following declarations:

char *s1 = “Calvin and Hobbes”;
char *s2 = “Calvin and Hobbes”;

the strings pointed by s1 and s2 may reside in the same memory location. But, it is not true for the following:

char ca1[] = “Calvin and Hobbes”;
char ca2[] = “Calvin and Hobbes”;

[1] The value of a string is the sequence of the values of the contained characters, in order.



Write down the equivalent pointer expression for referring the same element a[i][j][k][l]?

a[i] == *(a+i)
a[i][j] == *(*(a+i)+j)
a[i][j][k] == *(*(*(a+i)+j)+k)
a[i][j][k][l] == *(*(*(*(a+i)+j)+k)+l)

Which bit wise operator is suitable for checking whether a particular bit is on or off?

The bitwise AND operator. Here is an example:

enum {
KBit0 = 1,
KBit1,

KBit31,
};

if ( some_int & KBit24 )
printf ( “Bit number 24 is ON\n” );
else
printf ( “Bit number 24 is OFF\n” );

Which bit wise operator is suitable for turning off a particular bit in a number?

The bitwise AND operator, again. In the following code snippet, the bit number 24 is reset to zero.
some_int = some_int & ~KBit24;

Which bit wise operator is suitable for putting on a particular bit in a number?


The bitwise OR operator. In the following code snippet, the bit number 24 is turned ON:
some_int = some_int | KBit24;

Does there exist any other function which can be used to convert an integer or a float to a string?


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 );

Why does malloc(0) return valid memory address ? What's the use ?


malloc(0) does not return a non-NULL under every implementation.
An implementation is free to behave in a manner it finds
suitable, if the allocation size requested is zero. The
implmentation may choose any of the following actions:

* A null pointer is returned.

* The behavior is same as if a space of non-zero size
was requested. In this case, the usage of return
value yields to undefined-behavior.

Notice, however, that if the implementation returns a non-NULL
value for a request of a zero-length space, a pointer to object
of ZERO length is returned! Think, how an object of zero size
should be represented?

For implementations that return non-NULL values, a typical usage
is as follows:

void
func ( void )
{
int *p; /* p is a one-dimensional array,
whose size will vary during the
the lifetime of the program */
size_t c;

p = malloc(0); /* initial allocation */
if (!p)
{
perror (”FAILURE” );
return;
}

/* … */

while (1)
{
c = (size_t) … ; /* Calculate allocation size */
p = realloc ( p, c * sizeof *p );

/* use p, or break from the loop */
/* … */
}
return;
}

Notice that this program is not portable, since an implementation
is free to return NULL for a malloc(0) request, as the C Standard
does not support zero-sized objects.


Difference between const char* p and char const* p
in const char* p, the character pointed by ‘p’ is constant, so u cant change the value of character pointed by p but u can make ‘p’ refer to some other location.

in char const* p, the ptr ‘p’ is constant not the character referenced by it, so u cant make ‘p’ to reference to any other location but u can change the value of the char pointed by ‘p’.

How can method defined in multiple base classes with same name can be invoked from derived class simultaneously
ex:

class x
{
public:
m1();

};

class y
{
public:
m1();

};

class z :public x, public y
{
public:
m1()
{
x::m1();
y::m1();
}

};

Write a program to interchange 2 variables without using the third one.

a=7;
b=2;
a = a + b;
b = a - b;
a = a - b;

Can static variables be declared in a header file?

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.

Can a variable be both const and volatile?

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. For instance, in the example in FAQ 8, the timer structure was accessed through a volatile const pointer. 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.

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.
Many programmers like to create a custom header file that has #include statements for every header needed for each module. This is perfectly acceptable and can help avoid potential problems relating to #include files, such as accidentally omitting an #include file in a module.

Write the equivalent expression for x%8?


x&7
What is Preprocessor?

The preprocessor is used to modify your program according to the preprocessor directives in your source code. Preprocessor directives (such as #define) give the preprocessor specific instructions on how to modify your source code. 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.
The preprocessor contains many features that are powerful to use, such as creating macros, performing conditional compilation, inserting predefined environment variables into your code, and turning compiler features on and off. For the professional programmer, in-depth knowledge of the features of the preprocessor can be one of the keys to creating fast, efficient programs.

What is the purpose of realloc( )?

The function realloc(ptr,n) uses two arguments.the first argument ptr is a pointer to a block of memory for which the size is to be altered. The second argument n specifies the new size. The size may be increased or decreased. If n is greater than the old size and if sufficient space is not available subsequent to the old region, the function realloc( ) may create a new region and all the old data are moved to the new region.


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


What is static memory allocation and dynamic memory allocation?

Static memory allocation: The compiler allocates the required memory space for a declared variable.By using the address of operator,the reserved address is obtained and this address may be assigned to a pointer variable.Since most of the declared variable have static memory,this way of assigning pointer value to a pointer variable is known as static memory allocation. memory is assigned during compilation time.
Dynamic memory allocation: It uses functions such as malloc( ) or calloc( ) to get memory dynamically.If these functions are used to get memory dynamically and the values returned by these functions are assingned to pointer variables, such assignments are known as dynamic memory allocation.memory is assined during run time.


When would you use a pointer to a function?

Pointers to functions are interesting when you pass them to other functions. A function that takes function pointers says, in effect, Part of what I do can be customized. Give me a pointer to a function, and I’ll call it when that part of the job needs to be done. That function can do its part for me. This is known as a callback. It’s used a lot in graphical user interface libraries, in which the style of a display is built into the library but the contents of the display are part of the application.
As a simpler example, say you have an array of character pointers (char*s), and you want to sort it by the value of the strings the character pointers point to. The standard qsort() function uses function pointers to perform that task. qsort() takes four arguments,
- a pointer to the beginning of the array,
- the number of elements in the array,
- the size of each array element, and
- a comparison function, and returns an int.

Difference between arrays and pointers?

- Pointers are used to manipulate data using the address. Pointers use * operator to access the data pointed to by them
- Arrays use subscripted variables to access and manipulate data. Array variables can be equivalently written using pointer expression.

What are the advantages of the functions?


- Debugging is easier
- It is easier to understand the logic involved in the program
- Testing is easier
- Recursive call is possible
- Irrelevant details in the user point of view are hidden in functions
- Functions are helpful in generalizing the program

Is NULL always defined as 0?


NULL is defined as either 0 or (void*)0. These values are almost identical; either a literal zero or a void pointer is converted automatically to any kind of pointer, as necessary, whenever a pointer is needed (although the compiler can’t always tell when a pointer is needed).
What is the difference between NULL and NUL?


NULL is a macro defined in for the null pointer.
NUL is the name of the first character in the ASCII character set. It corresponds to a zero value. There’s no standard macro NUL in C, but some people like to define it.
The digit 0 corresponds to a value of 80, decimal. Don’t confuse the digit 0 with the value of ‘’ (NUL)! NULL can be defined as ((void*)0), NUL as ‘’.

Can the sizeof operator be used to tell the size of an array passed to a function?


No. There’s no way to tell, at runtime, how many elements are in an array parameter just by looking at the array parameter itself. Remember, passing an array to a function is exactly the same as passing a pointer to the first element.
Is using exit() the same as using return?


No. The exit() function is used to exit your program and return control to the operating system. The return statement is used to return from a function and return control to the calling function. If you issue a return from the main() function, you are essentially returning control to the calling function, which is the operating system. In this case, the return statement and exit() function are similar.
Can math operations be performed on a void pointer?


No. Pointer addition and subtraction are based on advancing the pointer by a number of elements. By definition, if you have a void pointer, you don’t know what it’s pointing to, so you don’t know the size of what it’s pointing to. If you want pointer arithmetic to work on raw addresses, use character pointers.
Can the size of an array be declared at runtime?


No. In an array declaration, the size must be known at compile time. You can’t specify a size that’s known only at runtime. For example, if i is a variable, you can’t write code like this:
char array[i]; /* not valid C */
Some languages provide this latitude. C doesn’t. If it did, the stack would be more complicated, function calls would be more expensive, and programs would run a lot slower. If you know that you have an array but you won’t know until runtime how big it will be, declare a pointer to it and use malloc() or calloc() to allocate the array from the heap.

Can you add pointers together? Why would you?


No, you can’t add pointers together. If you live at 1332 Lakeview Drive, and your neighbor lives at 1364 Lakeview, what’s 1332+1364? It’s a number, but it doesn’t mean anything. If you try to perform this type of calculation with pointers in a C program, your compiler will complain.
The only time the addition of pointers might come up is if you try to add a pointer and the difference of two pointers.

Are pointers integers?

No, pointers are not integers. A pointer is an address. It is merely a positive number and not an integer.

What is an lvalue?


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.
Diffenentiate between an internal static and external static variable?


An internal static variable is declared inside a block with static storage class whereas an external static variable is declared outside all the blocks in a file.An internal static variable has persistent storage,block scope and no linkage.An external static variable has permanent storage,file scope and internal linkage.
What is the difference between a string and an array?


An array is an array of anything. A string is a specific kind of an array with a well-known convention to determine its length.
There are two kinds of programming languages: those in which a string is just an array of characters, and those in which it’s a special type. In C, a string is just an array of characters (type char), with one wrinkle: a C string always ends with a NUL character. The “value” of an array is the same as the address of (or a pointer to) the first element; so, frequently, a C string and a pointer to char are used to mean the same thing.
An array can be any length. If it’s passed to a function, there’s no way the function can tell how long the array is supposed to be, unless some convention is used. The convention for strings is NUL termination; the last character is an ASCII NUL (‘’) character.

What is an argument ? differentiate between formal arguments and actual arguments?


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.
What are advantages and disadvantages of external storage class?


Advantages of external storage class
1)Persistent storage of a variable retains the latest value
2)The value is globally available
Disadvantages of external storage class
1)The storage for an external variable exists even when the variable is not needed
2)The side effect may produce surprising output
3)Modification of the program is difficult
4)Generality of a program is affected

What is a void pointer?


A void pointer is a C convention for a raw address. The compiler has no idea what type of object a void Pointer really points to. If you write
int *ip;
ip points to an int. If you write
void *p;
p doesn’t point to a void!
In C and C++, any time you need a void pointer, you can use another pointer type. For example, if you have a char*, you can pass it to a function that expects a void*. You don’t even need to cast it. In C (but not in C++), you can use a void* any time you need any kind of pointer, without casting. (In C++, you need to cast it).
A void pointer is used for working with raw memory or for passing a pointer to an unspecified type.
Some C code operates on raw memory. When C was first invented, character pointers (char *) were used for that. Then people started getting confused about when a character pointer was a string, when it was a character array, and when it was raw memory.

When is a switch statement better than multiple if statements?


A switch statement is generally best to use when you have more than two conditional expressions based on a single variable of numeric type.
What is storage class and what are storage variable ?


A storage class is an attribute that changes the behavior of a variable. It controls the lifetime, scope and linkage.
There are five types of storage classes
1) auto
2) static
3) extern
4) register
5) typedef

What is a static function?


A static function is a function whose scope is limited to the current source file. Scope refers to the visibility of a function or variable. If the function or variable is visible outside of the current source file, it is said to have global, or external, scope. If the function or variable is not visible outside of the current source file, it is said to have local, or static, scope.
What is a pointer variable?


A pointer variable is a variable that may contain the address of another variable or any valid address in the memory.
What is a pointer value and address?


A pointer value is a data object that refers to a memory location. Each memory location is numbered in the memory. The number attached to a memory location is called the address of the location.
What is a modulus operator? What are the restrictions of a modulus operator?


A Modulus operator gives the remainder value. The result of x%y is obtained by (x-(x/y)*y). This operator is applied only to integral operands and cannot be applied to float or double.
Differentiate between a linker and linkage?


A linker converts an object code into an executable code by linking together the necessary build in functions. The form and place of declaration where the variable is declared in a program determine the linkage of variable.
What is a function and built-in function?


A large program is subdivided into a number of smaller programs or subprograms. Each subprogram specifies one or more actions to be performed for a large program. such subprograms are functions.
The function supports only static and extern storage classes. By default, function assumes extern storage class. functions have global scope. Only register or auto storage class is allowed in the function parameters. Built-in functions that predefined and supplied along with the compiler are known as built-in functions. They are also known as library functions.

What are the advantages of auto variables?


1)The same auto variable name can be used in different blocks
2)There is no side effect by changing the values in the blocks
3)The memory is economically used
4)Auto variables have inherent protection because of local scope

What are the characteristics of arrays in C?


1) An array holds elements that have the same data type
2) Array elements are stored in subsequent memory locations
3) Two-dimensional array elements are stored row by row in subsequent memory locations.
4) Array name represents the address of the starting element
5) Array size should be mentioned in the declaration. Array size must be a constant expression and not a variable.

How do you print only part of a string?


/* Use printf() to print the first 11 characters of source_str. */
printf(First 11 characters: ‘%11.11s’n, source_str);


In C, what is the difference between a static variable and global variable?


A static variable declared outside of any function is accessible only to all the functions defined in the same file (as the static variable). However, a global variable can be accessed by any function (including the ones from different files).
In C, why is the void pointer useful?


When would you use it? The void pointer is useful because it is a generic pointer that any pointer can be cast into and back again without loss of information.
What is Polymorphism ?


'Polymorphism' is an object oriented term. Polymorphism may be defined as the ability of related objects to respond to the same message with different, but appropriate actions. In other words, polymorphism means taking more than one form. Polymorphism leads to two important aspects in Object Oriented terminology - Function Overloading and Function Overriding. Overloading is the practice of supplying more than one definition for a given function name in the same scope. The compiler is left to pick the appropriate version of the function or operator based on the arguments with which it is called. Overriding refers to the modifications made in the sub class to the inherited methods from the base class to change their behavior.
What is Operator overloading ?


When an operator is overloaded, it takes on an additional meaning relative to a certain class. But it can still retain all of its old meanings.
Examples:
1) The operators >> and << may be used for I/O operations because in the header, they are overloaded.
2) In a stack class it is possible to overload the + operator so that it appends the contents of one stack to the contents of another. But the + operator still retains its original meaning relative to other types of data.

What are Templates


C++ Templates allow u to generate families of functions or classes that can operate on a variety of different data types, freeing you from the need to create a separate function or class for each type. Using templates, u have the convenience of writing a single generic function or class definition, which the compiler automatically translates into a specific version of the function or class, for each of the different data types that your program actually uses. Many data structures and algorithms can be defined independently of the type of data they work with. You can increase the amount of shared code by separating data-dependent portions from data-independent portions, and templates were introduced to help you do that. 
What is the difference between run time binding and compile time binding?


Dynamic Binding :
The address of the functions are determined at runtime rather than @ compile time. This is also known as "Late Binding".

Static Binding :
The address of the functions are determined at compile time rather than @ run time. This is also known as "Early Binding" 

What is Difference Between C/C++

C does not have a class/object concept.
C++ provides data abstraction, data encapsulation, Inheritance and Polymorphism.
C++ supports all C syntax.
In C passing value to a function is "Call by Value" whereas in C++ its "Call by Reference"
File extension is .c in C while .cpp in C++.(C++ compiler compiles the files with .c extension but C compiler can not!)
In C structures can not have contain functions declarations. In C++ structures are like classes, so declaring functions is legal and allowed.
C++ can have inline/virtual functions for the classes.
c++ is C with Classes hence C++ while in c the closest u can get to an User defined data type is struct and union.

What is diff between malloc()/free() and new/delete?


malloc allocates memory for object in heap but doesn't invoke object's constructor to initiallize the object.

new allocates memory and also invokes constructor to initialize the object.

malloc() and free() do not support object semantics
Does not construct and destruct objects
string * ptr = (string *)(malloc (sizeof(string)))
Are not safe
Does not calculate the size of the objects that it construct
Returns a pointer to void
int *p = (int *) (malloc(sizeof(int)));
int *p = new int;
Are not extensible
new and delete can be overloaded in a class

"delete" first calls the object's termination routine (i.e. its destructor) and then releases the space the object occupied on the heap memory. If an array of objects was created using new, then delete must be told that it is dealing with an array by preceding the name with an empty []:-

Int_t *my_ints = new Int_t[10];

...

delete []my_ints;

what is the diff between "new" and "operator new" ?

"operator new" works like malloc.

What is difference between template and macro??


There is no way for the compiler to verify that the macro parameters are of compatible types. The macro is expanded without any special type checking.

If macro parameter has a postincremented variable ( like c++ ), the increment is performed two times.

Because macros are expanded by the preprocessor, compiler error messages will refer to the expanded macro, rather than the macro definition itself. Also, the macro will show up in expanded form during debugging.

for example:
Macro:
#define min(i, j) (i < j ? i : j)
template:
template<class T>
T min (T i, T j)
{
return i < j ? i : j;
}

Find the output of the following program


class Sample
{
public:
        int *ptr;
        Sample(int i)
        {
        ptr = new int(i);
        }
        ~Sample()
        {
        delete ptr;
        }
        void PrintVal()
        {
        cout << "The value is " << *ptr;
        }
};
void SomeFunc(Sample x)
{
cout << "Say i am in someFunc " << endl;
}
int main()
{
Sample s1= 10;
SomeFunc(s1);
s1.PrintVal();
}

Answer:
Say i am in someFunc
Null pointer assignment(Run-time error)

Explanation:
As the object is passed by value to SomeFunc  the destructor of the object is called when the control returns from the function. So when PrintVal is called it meets up with ptr  that has been freed.The solution is to pass the Sample object  by reference to SomeFunc:

void SomeFunc(Sample &x)
{
cout << "Say i am in someFunc " << endl;
}
because when we pass objects by refernece that object is not destroyed. while returning from the function.

Which is the parameter that is added to every non-static member function when it is called?


Answer:
‘this’ pointer

Find the output of the following program


class base
        {
        public:
        int bval;
        base(){ bval=0;}
        };
 
class deri:public base
        {
        public:
        int dval;
        deri(){ dval=1;}
        };
void SomeFunc(base *arr,int size)
{
for(int i=0; i

        cout<bval;
cout<
<ENDL;
}
 
int main()
{
base BaseArr[5];
SomeFunc(BaseArr,5);
deri DeriArr[5];
SomeFunc(DeriArr,5);
}

Answer:
 00000
 01010

Explanation:  
The function SomeFunc expects two arguments.The first one is a pointer to an array of base class objects and the second one is the sizeof the array.The first call of someFunc calls it with an array of bae objects, so it works correctly and prints the bval of all the objects. When Somefunc is called the second time the argument passed is the pointeer to an array of derived class objects and not the array of base class objects. But that is what the function expects to be sent. So the derived class pointer is promoted to base class pointer and the address is sent to the function. SomeFunc() knows nothing about this and just treats the pointer as an array of base class objects. So when arr++ is met, the size of base class object is taken into consideration and is incremented by sizeof(int) bytes for bval (the deri class objects have bval and dval as members and so is of size >= sizeof(int)+sizeof(int) ).

Find the output of the following program


class base
        {
        public:
            void baseFun(){ cout<<"from base"<
<ENDL;}
        };
 class deri:public base
        {
        public:
            void baseFun(){ cout<< "from derived"<
<ENDL;}
        };
void SomeFunc(base *baseObj)
{
        baseObj->baseFun();
}
int main()
{
base baseObject;
SomeFunc(&baseObject);
deri deriObject;
SomeFunc(&deriObject);
}

Answer:
            from base
            from base

Explanation:
            As we have seen in the previous case, SomeFunc expects a pointer to a base class. Since a pointer to a derived class object is passed, it treats the argument only as a base class pointer and the corresponding base function is called.

Find the output of the following program


class base
        {
        public:
            virtual void baseFun(){ cout<<"from base"<
<ENDL;}
        };
 class deri:public base
        {
        public:
            void baseFun(){ cout<< "from derived"<
<ENDL;}
        };
void SomeFunc(base *baseObj)
{
        baseObj->baseFun();
}
int main()
{
base baseObject;
SomeFunc(&baseObject);
deri deriObject;
SomeFunc(&deriObject);
}

Answer:
            from base
            from derived

Explanation:
            Remember that baseFunc is a virtual function. That means that it supports run-time polymorphism. So the function corresponding to the derived class object is called.

Find the output of the following program<<

class complex{
            double re;
            double im;
public:
            complex() : re(1),im(0.5) {}
            bool operator==(complex &rhs);
            operator int(){}
};
 
bool complex::operator == (complex &rhs){
            if((this->re == rhs.re) && (this->im == rhs.im))
                        return true;
            else
                        return false;
}
 
int main(){
            complex  c1;
            cout<<  c1;
}

Answer : Garbage value

Explanation:
            The programmer wishes to print the complex object using output
re-direction operator, which he has not defined for his lass. But the compiler instead of giving an error sees the conversion function
and converts the user defined object to standard object and prints
some garbage value.

Find the output of the following program


class complex{
            double re;
            double im;
public:
            complex() : re(0),im(0) {}
            complex(double n) { re=n,im=n;};
            complex(int m,int n) { re=m,im=n;}
            void print() { cout<
<
};
 
void main(){
            complex c3;
            double i=5;
            c3 = i;
            c3.print();
}

Answer:
            5,5

Explanation:
            Though no operator= function taking complex, double is defined, the double on the rhs is converted into a temporary object using the single argument constructor taking double and assigned to the lvalue.

Find the output of the following program 


void main()
{
            int a, *pa, &ra;
            pa = &a;
            ra = a;
            cout <<"a="<
<<
}
}
<<

Answer :
            Compiler Error: 'ra',reference must be initialized

<<
Explanation :
            Pointers are different from references. One of the main
differences is that the pointers can be both initialized and assigned, whereas references can only be initialized. So this code issues an error

What is a modifier?


A modifier, also called a modifying function is a member function that changes the value of at least one data member. In other words, an operation that modifies the state of an object. Modifiers are also known as ‘mutators’.
What is an accessor?


An accessor is a class operation that does not modify the state of an object. The accessor functions need to be declared as const operations
Differentiate between a template class and class template.


Template class:
A generic definition or a parameterized class not instantiated until the client provides the needed information. It’s jargon for plain templates.
Class template:
A class template specifies how individual classes can be constructed much like the way a class specifies how individual objects can be constructed. It’s jargon for plain classes.

When does a name clash occur?


A name clash occurs when a name is defined in more than one place. For example., two different class libraries could give two different classes the same name. If you try to use many class libraries at the same time, there is a fair chance that you will be unable to compile or link the program because of name clashes

Define namespace.


It is a feature in c++ to minimize name collisions in the global name space. This namespace keyword assigns a distinct name to a library that allows other libraries to use the same identifier names without creating any name collisions. Furthermore, the compiler uses the namespace signature for differentiating the definitions.
What is the use of ‘using’ declaration.


A using declaration makes it possible to use a name from a namespace without the scope operator.
List out some of the OODBMS available.



    GEMSTONE/OPAL of Gemstone systems.
    ONTOS of Ontos.
    Objectivity of  Objectivity inc.
    Versant of Versant object technology.
    Object store of Object Design.
    ARDENT of ARDENT software.
    POET of POET software.

List out some of the object-oriented methodologies.



Object Oriented Development  (OOD) (Booch 1991,1994).
Object Oriented Analysis and Design  (OOA/D) (Coad and Yourdon 1991).
Object Modelling Techniques  (OMT)  (Rumbaugh 1991).
Object Oriented Software Engineering  (Objectory) (Jacobson 1992).
Object Oriented Analysis  (OOA) (Shlaer and Mellor 1992).
The Fusion Method  (Coleman 1991).

What is an adaptor class or Wrapper class?


A class that has no functionality of its own. Its member functions hide the use of a third party software component or an object with the non-compatible interface or a non- object- oriented implementation.
What is a Null object?

It is an object of some class whose purpose is to indicate that a real object of that class does not exist. One common use for a null object is a return value from a member function that is supposed to return an object with some specified properties but cannot find such an object.

Name some pure object oriented languages.
Smalltalk,
Java,
Eiffel, 
Sather.
Name the operators that cannot be overloaded.


sizeof   .          .*         .->        ::          ?:   

What is an orthogonal base class?


If two base classes have no overlapping methods or data they are said to be independent of, or orthogonal to each other. Orthogonal in the sense means that two classes operate in different dimensions and do not interfere with each other in any way. The same derived class may inherit such classes with no difficulty.
What is a container class? What are the types of container classes?

A container class is a class that is used to hold objects in memory or external storage. A container class acts as a generic holder. A container class has a predefined behavior and a well-known interface. A container class is a supporting class whose purpose is to hide the topology used for maintaining the list of objects in memory. When a container class contains a group of mixed objects, the container is called a heterogeneous container; when the container is holding a group of objects that are all the same, the container is called a homogeneous container.

Differentiate between declaration and definition in C++.

A declaration introduces a name into the program; a definition provides a unique description of an entity (e.g. type, instance, and function). Declarations can be repeated in a given scope, it introduces a name in a given scope. There must be exactly one definition of every object, function or class used in a C++ program.
A declaration is a definition unless:
it declares a function without specifying its body,
it contains an extern specifier and no initializer or function body,
it is the declaration of a static class data member without a class definition,
it is a class name definition,
it is a typedef declaration.
A definition is a declaration unless:
it defines a static class data member,
it defines a non-inline member function.

Describe the main characteristics of static functions.


The main characteristics of static functions include,
It is without the a this pointer,
It can't directly access the non-static members of its class
It can't be declared const, volatile or virtual.
It doesn't need to be invoked through an object of its class, although for convenience, it may.             


Will the inline function be compiled as the inline function always? Justify.


An inline function is a request and not a command. Hence it won't be compiled as an inline function always.
Explanation:
Inline-expansion could fail if the inline function contains loops, the address of an inline function is used, or an inline function is called in a complex expression. The rules for inlining are compiler dependent.

Define a way other than using the keyword inline to make a function inline.


The function must be defined inside the class.  
How can a '::' operator be used as unary operator?


The scope operator can be used to refer to members of the global namespace. Because the global namespace doesn’t have a name, the notation :: member-name refers to a member of the global namespace. This can be useful for referring to members of global namespace whose names have been hidden by names declared in nested local scope. Unless we specify to the compiler in which namespace to search for a declaration, the compiler simple searches the current scope, and any scopes in which the current scope is nested, to find the declaration for the name.
OOAD
What do you mean by analysis and design?


Analysis:
Basically, it is the process of determining what needs to be done before how it should be done. In order to accomplish this, the developer refers the existing systems and documents. So, simply it is an art of discovery.
Design:
It is the process of adopting/choosing the one among the many, which best accomplishes the users needs. So, simply, it is compromising mechanism.
What are the steps involved in designing?
Before getting into the design the designer should go through the SRS prepared by the System Analyst.
            The main tasks of design are Architectural Design and Detailed Design.
            In Architectural Design we find what are the main modules in the problem domain.
In Detailed Design we find what should be done within each module.


What are the main underlying concepts of object orientation?

Objects, messages, class, inheritance and polymorphism are the main concepts of object orientation.
What do u meant by "SBI" of an object?

SBI stands for State, Behavior and Identity. Since every object has the above three.
State:        
It is just a value to the attribute of an object at a particular time.
Behaviour:
It describes the actions and their reactions of that object.
Identity:
An object has an identity that characterizes its own existence. The identity makes it possible to distinguish any object in an unambiguous way, and independently from its state.

What is meant by software development method?


Software development method describes how to model and build software systems in a reliable and reproducible way. To put it simple, methods that are used to represent ones' thinking using graphical notations.
What are models and meta models?


Model:
It is a complete description of something (i.e. system).
Meta model:
It describes the model elements, syntax and semantics of the notation that allows their manipulation.

What do you meant by static and dynamic modeling?


Static modeling is used to specify structure of the objects that exist in the problem domain. These are expressed using class, object and USECASE diagrams.
            But Dynamic modeling refers representing the object interactions during runtime. It is represented by sequence, activity, collaboration and statechart diagrams.



Why does the function arguments are called as "signatures"?
        

The arguments distinguish functions with the same name (functional polymorphism). The name alone does not necessarily identify a unique function.  However, the name and its arguments (signatures) will uniquely identify a function.
In real life we see suppose, in class there are two guys with same name, but they can be easily identified by their signatures. The same concept is applied here.
            ex:
                        class person
                        {
                  public:
                                    char getsex();
                                    void setsex(char);
                                    void setsex(int);
                        };

In the above example we see that there is a function setsex() with same name but with different signature.