C Programming - Declarations and Initializations - Discussion

Discussion Forum : Declarations and Initializations - Find Output of Program (Q.No. 4)
4.
What is the output of the program in Turbo C (in DOS 16-bit OS)?
#include<stdio.h>
int main()
{
    char *s1;
    char far *s2;
    char huge *s3;
    printf("%d, %d, %d\n", sizeof(s1), sizeof(s2), sizeof(s3));
    return 0;
}
2, 4, 6
4, 4, 2
2, 4, 4
2, 2, 2
Answer: Option
Explanation:

Any pointer size is 2 bytes. (only 16-bit offset)
So, char *s1 = 2 bytes.
So, char far *s2; = 4 bytes.
So, char huge *s3; = 4 bytes.
A far, huge pointer has two parts: a 16-bit segment value and a 16-bit offset value.

Since C is a compiler dependent language, it may give different output in other platforms. The above program works fine in Windows (TurboC), but error in Linux (GCC Compiler).

Discussion:
55 comments Page 6 of 6.

Rohit said:   1 decade ago
How is the answer is 2, 4, 4 explain in depth ?

Amit said:   1 decade ago
Please explain the differences between the exit(0); and exit(1);and also the difference between the return(0); and return(1);.

Siva Krishna said:   1 decade ago
@Amit and Poornima.

Whenever a program encounters the instruction
exit(0);
It means it sent a 0 to operating system which means normal termination of the program and same is entered in the system log
And

Whenever a program encounters the instruction
exit(1);
It means it sent a 1 to operating system which means abnormal termination and it enters an error termination in the system log.

Note:
0 means successful termination.
1 or non-zero abnormal termination.

Conclusion:
Both are used to termination only. but the difference to indicate to the OS and a professional programming.

Sapna yadav said:   1 decade ago
How it will print 2,4,4 for pointer it will take 2 byte but for these two lines,

char far *s2;
char huge *s3;

Can anyone explain me??

Madhav said:   1 decade ago
Now a days 16 OS: not available in market.

So we are use either 32 bit or 64 bit.

Please ask Q for 32/64 bit compiler not 16/8/4/2/1 bit compiler.


Post your comments here:

Your comments will be displayed after verification.