|
Technical Interview Questions
.Net Interview Questions
C++ Interview Questions
Unix Interview Questions
.........More
Download e-Books
C Interview Questions e-book
Aptitude Interview Questions
C/C++ Aptitude Questions
C Aptitude Questions
.........More
Online Quiz
C
Online Quiz
C++
Online Quiz
.........More
Soft Skills
Communication Skills
Leadership Skills
.........More
|
|
C Interview Questions and Answers
Why doesn't the following code give the desired result?
int x = 3000, y = 2000 ;
long int z = x * y ;
Here the multiplication is carried out between two ints x and y, and the
result that would overflow would be truncated before being assigned to
the variable z of type long int. However, to get the correct output, we
should use an explicit cast to force long arithmetic as shown below:
long int z = ( long int ) x * y ;
Note that ( long int )( x * y ) would not give the desired effect.
Why doesn't the following statement work?
char str[ ] = "Hello" ;
strcat ( str, '!' ) ;
The string function strcat( ) concatenates strings and not a character.
The basic difference between a string and a character is that a string
is a collection of characters, represented by an array of characters
whereas a character is a single character. To make the above statement
work writes the statement as shown below:
strcat ( str, "!" ) ;
How do I know how many elements an array can hold?
The amount of memory an array can consume depends on the data type of an
array. In DOS environment, the amount of memory an array can consume
depends on the current memory model (i.e. Tiny, Small, Large, Huge,
etc.). In general an array cannot consume more than 64 kb. Consider
following program, which shows the maximum number of elements an array
of type int, float and char can have in case of Small memory model.
main( )
{
int i[32767] ;
float f[16383] ;
char s[65535] ;
}
How do I write code that reads data at memory location specified
by segment and offset?
Use peekb( ) function. This function returns byte(s) read from specific
segment and offset locations in memory. The following program
illustrates use of this function. In this program from VDU memory we
have read characters and its attributes of the first row. The
information stored in file is then further read and displayed using
peek( ) function.
#include <stdio.h>
#include <dos.h>
main( )
{
char far *scr = 0xB8000000 ;
FILE *fp ;
int offset ;
char ch ;
if ( ( fp = fopen ( "scr.dat", "wb" ) ) == NULL )
{
printf ( "\nUnable to open file" ) ;
exit( ) ;
}
// reads and writes to file
for ( offset = 0 ; offset < 160 ; offset++ )
fprintf ( fp, "%c", peekb ( scr, offset ) ) ;
fclose ( fp ) ;
if ( ( fp = fopen ( "scr.dat", "rb" ) ) == NULL )
{
printf ( "\nUnable to open file" ) ;
exit( ) ;
}
// reads and writes to file
for ( offset = 0 ; offset < 160 ; offset++ )
{
fscanf ( fp, "%c", &ch ) ;
printf ( "%c", ch ) ;
}
fclose ( fp ) ;
}
What is conversion operator?
class can have a public method for specific data type conversions.
for example:
class Boo
{
double value;
public:
Boo(int i )
operator double()
{
return value;
}
};
Boo BooObject;
double i = BooObject; // assigning object to variable i of type double.
now conversion operator gets called to assign the value.
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;
}
Page Numbers :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Have a Question ?
post your questions here. It
will be answered as soon as possible.
|