Predict the output or
error(s) for the following:
1. void main()
const * p=5;
Compiler error: Cannot modify a constant value.
p is a pointer to a "constant integer". But we tried to change the value of the
s[i], *(i+s), *(s+i), i[s] are all different ways of expressing the same idea.
Generally array name is the base address for that array. Here s is the
base address. i is the index number/displacement from the base address. So,
indirecting it with * is same as s[i]. i[s] may be surprising. But in the
case of C it is same as s[i].
float me =
double you =
printf("I love U");
printf("I hate U");
I hate U
For floating point numbers (float, double, long double) the values cannot be
predicted exactly. Depending on the number of bytes, the precession with of the
value represented varies. Float takes 4 bytes and long double takes 10
bytes. So float stores 0.9 with less precision than long double.
Rule of Thumb:
Never compare or at-least be cautious when using floating point numbers with
relational operators (== , >, <, <=, >=,!= ) .
var = 5;
5 4 3 2 1
When static storage class is given, it is initialized once. The change in the
value of a static variable is retained even between the function calls. Main is
also treated like any other ordinary function, which can be called recursively.
printf(" %d ",*c);
printf(" %d ",*p);
2 2 2 2 2 2 3 4 6 5
Initially pointer c is assigned to both p and q. In the first loop, since only q
is incremented and not c , the value 2 will be printed 5 times. In second loop p
itself is incremented. So the values 2 3 4 6 5 will be printed.
extern int i;
Linker Error : Undefined symbol '_i'
extern storage class in the following declaration,
extern int i;
specifies to the compiler that the memory for i is allocated in some other
program and that address will be given to the current program at the time of
linking. But linker finds that no other variable of name i is available in any
other program with memory space allocated for it. Hence a linker error has
Page Numbers :