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 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
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 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.
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.
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
Page Numbers :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15