Pages

Thursday

C Aptitude Questions with Answers Part 28

1)
main() {  
    extern i; 
  printf("%d\n",i); 

  {
    int i=20; 
    printf("%d\n",i); 
   } 
} 

Answer:
Linker Error : Unresolved external symbol i
Explanation:
The identifier i is available in the inner block and so using extern has no use in resolving it.

2)
main() {
  int a=2,*f1,*f2; 
  f1=f2=&a; 
  *f2+=*f2+=a+=2.5; 
  printf("\n%d %d %d",a,*f1,*f2); 
} 

Answer:
16 16 16 
Explanation:
f1 and f2 both refer to the same memory location a. So changes through f1and f2 ultimately affects only the value of a.

3)
main() {
  char *p="GOOD"; 
  char a[ ]="GOOD"; 
  printf("\n  sizeof(p)  =  %d,  sizeof(*p)  =  %d,  strlen(p)  =  %d",  sizeof(p), 
  sizeof(*p), strlen(p)); 
  printf("\n sizeof(a) = %d, strlen(a) = %d", sizeof(a), strlen(a)); 
} 

Answer:
sizeof(p) = 2, sizeof(*p) = 1, strlen(p) = 4
sizeof(a) = 5, strlen(a) = 4

Explanation:
sizeof(p) => sizeof(char*) => 2
sizeof(*p) => sizeof(char) => 1
Similarly,
sizeof(a) => size of the character array => 5
When sizeof operator is applied to an array it returns the sizeof the array and it is not the same as the sizeof the pointer variable. Here the sizeof(a) where a is the character array and the size of the array is 5 because the space necessary for the terminating NULL character should also be taken into account.

4)
#define DIM( array, type) sizeof(array)/sizeof(type) 
main() {
  int arr[10]; 
  printf(“The dimension of the array is %d”, DIM(arr, int));     
} 

Answer:
10
Explanation:
The size of integer array of 10 elements is 10 * sizeof(int). The macro expands to sizeof(arr)/sizeof(int) => 10 * sizeof(int) / sizeof(int) => 10.

5)
int DIM(int array[]) {
   return sizeof(array)/sizeof(int ); 
} 
main() {
   int arr[10]; 
   printf(“The dimension of the array is %d”, DIM(arr));     
} 

Answer:
1
Explanation:
Arrays cannot be passed to functions as arguments and only the pointers can be passed. So the argument is equivalent to int * array (this is one of the very few places where [] and * usage are equivalent). The return statement becomes, sizeof(int *)/ sizeof(int) that happens to be equal in this case.

No comments:

Post a Comment