Thursday, August 9, 2018

C Questions And Answers – 2018C9

There are many commonly asked questions regarding C programming language. Below are some collected such question-answer examples. The questions are usually related with 32-bit system, Turbo C IDE in windows or GCC under Linux environment [not always].

For more such examples, click C_Q&A label.

Predict the output or error(s) for the following:

 

-------------------------------------------------------------------------------------------------

 

struct point

{

int x;

int y;

};

struct point origin,*pp;

main()

{

pp=&origin;

printf("origin is(%d%d)\n",(*pp).x,(*pp).y);

printf("origin is (%d%d)\n",pp->x,pp->y);

}

 

Answer:

origin is(0,0)

origin is(0,0)

 

Explanation:

pp is a pointer to structure. we can access the elements of the structure either with arrow mark or with indirection operator.

 

Note:

Since structure point is globally declared x & y are initialized as Zeroes

 

-------------------------------------------------------------------------------------------------

 

main()

{

int i=_l_abc(10);

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

}

int _l_abc(int i)

{

return(i++);

}

 

Answer:

                   9

 

Explanation:

return(i++) it will first return i and then increments. i.e. 10 will be returned.

 

-------------------------------------------------------------------------------------------------

 

main()

{

char *p;

int *q;

long *r;

p=q=r=0;

p++;

q++;

r++;

printf("%p...%p...%p",p,q,r);

}

 

Answer:

                   0001...0002...0004

 

Explanation:

++ operator when applied to pointers increments address according to their corresponding data-types.

 

-------------------------------------------------------------------------------------------------

 

main()

{

char c=' ',x,convert(z);

getc(c);

if((c>='a') && (c<='z'))

x=convert(c);

printf("%c",x);

}

convert(z)

{

     return z-32;

}

 

Answer:

                   Compiler error

 

Explanation:

declaration of convert and format of getc() are wrong.

 

-------------------------------------------------------------------------------------------------

 

main(int argc, char **argv)

{

printf("enter the character");

 

getchar();

sum(argv[1],argv[2]);

}

sum(num1,num2)

int num1,num2;

{

     return num1+num2;

}

 

Answer:

                   Compiler error.

 

Explanation:

argv[1] & argv[2] are strings. They are passed to the function sum without converting it to integer values.

 

-------------------------------------------------------------------------------------------------

 

# include <stdio.h>

int one_d[]={1,2,3};

main()

{

int *ptr;

ptr=one_d;

ptr+=3;

printf("%d",*ptr);

}

 

Answer:

                   garbage value

 

Explanation:

ptr pointer is pointing to out of the array range of one_d.

 

-------------------------------------------------------------------------------------------------

 

# include<stdio.h>

aaa() {

     printf("hi");

}

bbb(){

     printf("hello");

}

ccc(){

     printf("bye");

}

main()

{

int (*ptr[3])();

ptr[0]=aaa;

ptr[1]=bbb;

ptr[2]=ccc;

ptr[2]();

}

 

Answer:

                   bye

 

Explanation:

ptr is array of pointers to functions of return type int.ptr[0] is assigned to address of the function aaa. Similarly ptr[1] and ptr[2] for bbb and ccc respectively. ptr[2]() is in effect of writing ccc(), since ptr[2] points to ccc.

 

-------------------------------------------------------------------------------------------------

 

#include<stdio.h>

main()

{

FILE *ptr;

char i;

ptr=fopen("zzz.c","r");

while((i=fgetch(ptr))!=EOF)

printf("%c",i);

}

 

Answer:

                   contents of zzz.c followed by an infinite loop

 

Explanation:

The condition is checked against EOF, it should be checked against NULL.

 

-------------------------------------------------------------------------------------------------

 

main()

{

int i =0;j=0;

if(i && j++)

printf("%d..%d",i++,j);

printf("%d..%d,i,j);

}

 

Answer:

                   0..0

 

Explanation:

The value of i is 0. Since this information is enough to determine the truth value of the boolean expression. So the statement following the if statement is not executed. The values of i and j remain unchanged and get printed.

 

-------------------------------------------------------------------------------------------------

 

…till next post, bye-bye & take care.

No comments:

Post a Comment