Monday 18 March 2013

register i=5;


    #include<stdio.h>
main()
  {
    register i=5;
    char j[]= "hello";                    
     printf("%s  %d",j,i);
}
Answer:
hello 5
Explanation:
if you declare i as register  compiler will treat it as ordinary integer and it will take integer value. i value may be  stored  either in register  or in memory.



Blog Author: Vijay Kumar

Go to: Java Aptitude

const int i=4; float j; j = ++i;


    #include<stdio.h>
main()
 {
   const int i=4;
   float j;
   j = ++i;
   printf("%d  %f", i,++j);
 }
Answer:
Compiler error
    Explanation:
i is a constant. you cannot change the value of constant 



Blog Author: Vijay Kumar

Go to: Java Aptitude

printf("i = %d, -i = %d \n",i,-i);



    main()
    {
    int i=-1;
    -i;
    printf("i = %d, -i = %d \n",i,-i);
    }
Answer:
i = -1, -i = 1
Explanation:
-i is executed and this execution doesn't affect the value of i. In printf first you just print the value of i. After that the value of the expression -i = -(-1) is printed.


Blog Author: Vijay Kumar

Go to: Java Aptitude

variable's block


    main()
    {
        int *j;
        {
         int i=10;
         j=&i;
         }
         printf("%d",*j);
}
Answer:
10
Explanation:
The variable i is a block level variable and the visibility is inside that block only. But the lifetime of i is lifetime of the function so it lives upto the exit of main function. Since the i is still allocated space, *j prints the value stored in i since j points i.



Blog Author: Vijay Kumar

Go to: Java Aptitude

Three same variables in program


    int i=10;
    main()
    {
     extern int i;
               {
         int i=20;
         {
          const volatile unsigned i=30;
          printf("%d",i);
         }
          printf("%d",i);
       }
    printf("%d",i);
    }
Answer:
30,20,10
Explanation:
'{' introduces new block and thus new scope. In the innermost block i is declared as,
    const volatile unsigned
which is a valid declaration. i is assumed of type int. So printf prints 30. In the next block, i has value 20 and so printf prints 20. In the outermost block, i is declared as extern, so no storage space is allocated for it. After compilation is over the linker resolves it to global variable i (since it is the only variable visible there). So it prints i's value as 10.

Blog Author: Vijay Kumar

Go to: Java Aptitude


#define int arr1[max]


    #define max 5
    #define int arr1[max]
    main()
    {
    typedef char arr2[max];
    arr1 list={0,1,2,3,4};
    arr2 name="name";
    printf("%d %s",list[0],name);
    }
Answer:
Compiler error (in the line arr1 list = {0,1,2,3,4})
Explanation:
arr2 is declared of type array of size 5 of characters. So it can be used to declare the variable name of the type arr2. But it is not the case of arr1. Hence an error.
Rule of Thumb:
#defines are used for textual replacement whereas typedefs are used for declaring new types.

Blog Author: Vijay Kumar

Go to: Java Aptitude


if( (y%4==0 && y%100 != 0) || y%100 == 0 )


main()
    {
    int y;
    scanf("%d",&y); // input given is 2000
    if( (y%4==0 && y%100 != 0) || y%100 == 0 )
         printf("%d is a leap year");
    else
         printf("%d is not a leap year");
    }
Answer:
2000 is a leap year
Explanation:
An ordinary program to check if leap year or not

Blog Author: Vijay Kumar

Go to: Java Aptitude


printf("%d==1 is ""%s",k,k==1?"TRUE":"FALSE");


main()
    {
    int k=1;
    printf("%d==1 is ""%s",k,k==1?"TRUE":"FALSE");
    }
Answer:
1==1 is TRUE
Explanation:
When two strings are placed together (or separated by white-space) they are concatenated (this is called as "stringization" operation). So the string is as if it is given as "%d==1 is %s". The conditional operator( ?: ) evaluates to "TRUE".

Blog Author: Vijay Kumar

Go to: Java Aptitude


#define FALSE -1 #define TRUE 1 #define NULL 0


#define FALSE -1
    #define TRUE   1
    #define NULL   0
    main() {
       if(NULL)
         puts("NULL");
       else if(FALSE)
         puts("TRUE");
       else
         puts("FALSE");
       }
Answer:
TRUE
Explanation:
The input program to the compiler after processing by the preprocessor is,
    main(){
         if(0)
             puts("NULL");
    else if(-1)
             puts("TRUE");
    else
             puts("FALSE");
         }
Preprocessor doesn't replace the values given inside the double quotes. The check by if condition is boolean value false so it goes to else. In second if -1 is boolean value true hence "TRUE" is printed.

Blog Author: Vijay Kumar

Go to: Java Aptitude


char far *farther,*farthest;


void main()
{
 char far *farther,*farthest;
 
 printf("%d..%d",sizeof(farther),sizeof(farthest));
  
 }
Answer:
4..2 
Explanation:
    the second pointer is of char type and not a far pointer.
Some explanation first:
far pointers are outdated concepts from C, and are actually
compiler extentions, so you might get compiler errors trying
to use far pointers on some compilers.
In the program above, 
farther's type - FAR pointer to char
farthest's type - near pointer to char
now, the difference in size of those stems from the fact
that far pointers consist of the segment and offset
together, while near pointers just have the offset. 
Near pointers thus have size of 2 (just the offset), while
far pointers - size of 4 bytes.

Blog Author: Vijay Kumar
Go to: Java Aptitude