Question 1: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’.
Question 2: What is hashing?
To hash means to grind up, and that’s essentially what hashing is all
about. The heart of a hashing algorithm is a hash function that takes
your nice, neat data and grinds it into some random-looking integer.
The idea behind hashing is that some data either has no inherent
ordering (such as images) or is expensive to compare (such as
images). If the data has no inherent ordering, you can’t perform
comparison searches.
If the data is expensive to compare, the number of comparisons used
even by a binary search might be too many. So instead of looking at
the data themselves, you’ll condense (hash) the data to an integer (its
hash value) and keep all the data with the same hash value in the
same place. This task is carried out by using the hash value as an
index into an array.
To search for an item, you simply hash it and look at all the data whose
hash values match that of the data you’re looking for. This technique
greatly lessens the number of items you have to look at. If the
parameters are set up with care and enough storage is available for
the hash table, the number of comparisons needed to find an item can
be made arbitrarily close to one.
One aspect that affects the efficiency of a hashing implementation is
the hash function itself. It should ideally distribute data randomly
throughout the entire hash table, to reduce the likelihood of collisions.
Collisions occur when two different keys have the same hash value.
There are two ways to resolve this problem. In open addressing, the
collision is resolved by the choosing of another position in the hash
table for the element inserted later. When the hash table is searched, if
the entry is not found at its hashed position in the table, the search
continues checking until either the element is found or an empty
position in the table is found.
The second method of resolving a hash collision is called chaining. In
this method, a bucket or linked list holds all the elements whose keys
hash to the same value. When the hash table is searched, the list must
be searched linearly
.
Question:3 How can you determine the size of an allocated portion of memory?
You can’t, really. free() can , but there’s no way for your program to
know the trick free() uses. Even if you disassemble the library and
discover the trick, there’s no guarantee the trick won’t change with the
next release of the compiler.
Question 4: 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.
Question 5: 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.
Question 6: Can include files be nested?
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.
Question 7: When does the compiler not implicitly generate the address of the first
element of an array?
Whenever an array name appears in an expression such as
- array as an operand of the sizeof operator
- array as an operand of & operator
- array as a string literal initializer for a character array
Then the compiler does not implicitly generate the address of the
address of the first element of an array.
Question 9: What is a null pointer?
There are times when it’s necessary to have a pointer that doesn’t
point to anything. The macro NULL, defined in , has a value that’s
guaranteed to be different from any valid pointer. NULL is a literal zero,
possibly cast to void* or char*. Some people, notably C++
programmers, prefer to use 0 rather than NULL.
The null pointer is used in three ways:
1) To stop indirection in a recursive data structure
2) As an error value
3) As a sentinel value
Question 10: What is the difference between text and binary modes?
Streams can be classified into two types: text streams and binary
streams. Text streams are interpreted, with a maximum length of 255
characters. With text streams, carriage return/line feed combinations
are translated to the newline n character and vice versa. Binary
streams are uninterrupted and are treated one byte at a time with no
translation of characters. Typically, a text stream would be used for
reading and writing standard text files, printing output to the screen or
printer, or receiving input from the keyboard.
A binary text stream would typically be used for reading and writing
binary files such as graphics or word processing documents, reading
mouse input, or reading and writing to the modem.
Question 11: 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 should a far pointer be used?
Sometimes you can get away with using a small memory model in
most of a given program. There might be just a few things that don’t fit
in your small data and code segments. When that happens, you can
use explicit far pointers and function declarations to get at the rest of
memory. A far function can be outside the 64KB segment most
functions are shoehorned into for a small-code model. (Often, libraries
are declared explicitly far, so they’ll work no matter what code model
the program uses.) A far pointer can refer to information outside the
64KB data segment. Typically, such pointers are used with farmalloc()
and such, to manage a heap separate from where all the rest of the
data lives. If you use a small-data, large-code model, you should
explicitly make your function pointers far.
Question 12: How are pointer variables initialized?
Pointer variable are initialized by one of the following two ways
- Static memory allocation
- Dynamic memory allocation
Question 13: 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.
Question 14: 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.
Question 15: How many levels deep can include files be nested?
Even though there is no limit to the number of levels of nested include
files you can have, your compiler might run out of stack space while
trying to include an inordinately high number of files. This number
varies according to your hardware configuration and possibly your
compiler.
Question 16: What is the difference between declaring a variable and defining a variable?
Declaring a variable means describing its type to the compiler but not
allocating any space for it. Defining a variable means declaring it and
also allocating space to hold the variable. You can also initialize a
variable at the time it is defined.
Question17: 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.
Question 18: Differentiate 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.
Question 19: 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.
Question 20: 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
there is no difference between const char *p and char const *p;
Looks like you wanted to ask the difference between
const char *p and char *const p;
Yes, there is no difference between const char *p and char const *p;.
Please change your question .