C query

ce_neha
@ce-neha-RCoDQE • Oct 25, 2024

Hi ,

Please make me understand the output of the following code:-

#include<stdio.h>
void main()
{
char *s1;
char far *s2;
char huge *s3;
printf("%d %d %d ",sizeof(s1),sizeof(s2),sizeof(s3));
}

Replies

Welcome, guest

Join CrazyEngineers to reply, ask questions, and participate in conversations.

CrazyEngineers powered by Jatra Community Platform

  • ameyaamu

    @ameyaamu-myoFwJ Aug 24, 2009

    ce_nehaHi ,

    Please make me understand the output of the following code:-

    #include<stdio.h>
    void main()
    {
    char *s1;
    char far *s2;
    char huge *s3;
    printf("%d %d %d ",sizeof(s1),sizeof(s2),sizeof(s3));
    }

    i know answer of 1st 1 byte,4 byte,4byte

  • M.Pardhu

    @mpardhu-v8KwMM Aug 26, 2009

    THE OUTPUT OF PROGRAM IS

    4 4 4



    😎PARDHU😎

  • gaurav.bhorkar

    @gauravbhorkar-Pf9kZD Sep 1, 2009

    The output is 4 4 4 because every pointer is 4 bytes long irrespective of what type it is pointing.

  • devil_rads

    @devil-rads-pvv1yP Sep 10, 2009

    I just ran the program and it is showing the output as 2 4 4....
    Can u please elaborate your ans...

  • gaurav.bhorkar

    @gauravbhorkar-Pf9kZD Sep 10, 2009

    devil_radsI just ran the program and it is showing the output as 2 4 4....
    Can u please elaborate your ans...

    The program gives errors on compiling.

    It runs only after modifying in this way

    #include<stdio.h>
    void main()
    {
         char *s1;
         char *s2;
         char *s3;
         printf("%d %d %d ",sizeof(s1),sizeof(s2),sizeof(s3));
         getch();
    }
    

    Output: 4 4 4
    Using dev-c++ compiler. (or gcc)

  • brahmaasthra

    @brahmaasthra-quGsJu Sep 13, 2009

    First one char *str : str is a pointer variable which stores an address of a char datatype. So the size is 2 bytes (default). In which you can address from (0000)hexa to (FFFF)hexa. you cant go beyond that.

    Second one is char far *str: far pointer increases the addressable locations. where you can give address ranges from (00000000)hexa to (FFFFFFFF)hexa. Ex:- for the monitor output the address is 0800 0000 hexa.

    Third one is char huge *str: when far pointer overflows ie gets incremented from (FFFFFFFF) + 1 it again goes to (00000000) hexa. The address is inside the same process.
    But in the case of huge if it gets overflow (FFFFFFFF)+1 it goes to the next process 1 0000 0000 hexa.

  • gaurav.bhorkar

    @gauravbhorkar-Pf9kZD Sep 14, 2009

    char *s1;
    char far *s2;
    char huge *s3;

    What is far and huge ?

  • Sahithi Pallavi

    @sahithi-oJZaYj Sep 14, 2009

    ce_nehaHi ,

    Please make me understand the output of the following code:-

    #include<stdio.h>
    void main()
    {
    char *s1;
    char far *s2;
    char huge *s3;
    printf("%d %d %d ",sizeof(s1),sizeof(s2),sizeof(s3));
    }




    hey first can you tell me what is far and huge in your program.?





    WINNERS DONT DO DIFFERENT THINGS....THEY DO THINGS DIFFERENTLY....

  • pdpatel

    @pdpatel-TqKKui Sep 16, 2009

    ce_nehaHi ,

    Please make me understand the output of the following code:-

    #include<stdio.h>
    void main()
    {
    char *s1;
    char far *s2;
    char huge *s3;
    printf("%d %d %d ",sizeof(s1),sizeof(s2),sizeof(s3));
    }

    As per my knowledge:

    This is happen because simple pointer store in ram and far pointer use video memory.

  • Saandeep Sreerambatla

    @saandeep-sreerambatla-hWHU1M Sep 16, 2009

    brahmaasthraFirst one char *str : str is a pointer variable which stores an address of a char datatype. So the size is 2 bytes (default). In which you can address from (0000)hexa to (FFFF)hexa. you cant go beyond that.

    Second one is char far *str: far pointer increases the addressable locations. where you can give address ranges from (00000000)hexa to (FFFFFFFF)hexa. Ex:- for the monitor output the address is 0800 0000 hexa.

    Third one is char huge *str: when far pointer overflows ie gets incremented from (FFFFFFFF) + 1 it again goes to (00000000) hexa. The address is inside the same process.
    But in the case of huge if it gets overflow (FFFFFFFF)+1 it goes to the next process 1 0000 0000 hexa.


    I guess this is the correct answer!!!