Predict the output (or) error(s) for the following 1 - 5


1.      void main()
            {
            int const * p=5;
            printf("%d",++(*p));
            }
Answer:
            Compiler error: Cannot modify a constant value.
Explanation:
            p is a pointer to a "constant integer". But we tried to change the value of the "constant integer".

2.    main()
            {
            char s[ ]="man";
            int i;
            for(i=0;s[ i ];i++)
            printf("\n%c%c%c%c",
            s[ i ],*(s+i),*(i+s),i[s]);
            }

Answer:
mmmm
aaaa
nnnn
Explanation:
            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  as address. So, in directing it with * is same as s[i]. i[s] may be surprising. But in the case of C it is same as s[i].

3.     main()
            {
            float me = 1.1;
            double you = 1.1;
            if(me==you)
            printf("I love U");
            else
            printf("I hate U");
            }

Answer:
            I hate U
Explanation:
            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.                           (== , >, <, <=, >=,!= ) .

4.     main()
            {
            static int var = 5;
            printf("%d ",var--);
            if(var)
            main();
            }
Answer:
            5 4 3 2 1
Explanation:
            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.

5.     main()
            {
            int c[ ]={2.8,3.4,4,6.7,5};
            int j,*p=c,*q=c;
            for(j=0;j<5;j++)
             {
            printf(" %d ",*c);
            ++q;
             }
            for(j=0;j<5;j++)
            {
            printf(" %d ",*p);
            ++p;
            }
            }
Answer:
            2 2 2 2 2 2 3 4 6 5
Explanation:

            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.

No comments:

Post a Comment

Thank you for using this blog.