C++ Structures | Find output programs | Set 3

This section contains the C++ find output programs with their explanations on C++ Structures (set 3).
Submitted by Nidhi, on June 17, 2020

Program 1:

#include <iostream>
#pragma pack(1)
using namespace std;

typedef struct{
    int A;
    int B;
    char c1;
    char c2;
} S;

int main()
{
    cout << sizeof(S);
    return 0;
}

Output:

In a 32-bit system: 10
In a 64-bit system: 18

Explanation:

We compiled the program on a 32-bit system. It will print "10" on the console screen.

Normally, the above program will print "12" due to structure padding. But, here, we used #pragma pack(1) directives. It is used to avoid the structure padding. Then the size of the above structure will be "10".

Program 2:

#include <iostream>
using namespace std;

struct st {
    char c1;
    int A;
    int B;
    char c2;
};

int main()
{
    struct st* ptr;

    cout << sizeof(ptr);

    return 0;
}

Output:

In a 32-bit system: 4
In a 64-bit system: 8

Explanation:

We compiled this program on a 32-bit system.

Here, we created a structure with 4 members, and a pointer to the structure.

cout<<sizeof(ptr);

The above statement will print "4". Because, the size of any type of pointer in a 32-bit system is 4 bytes.

Program 3:

#include <iostream>
using namespace std;

struct st {
    char c1;
    int A;
    int B;
    char c2;
};

int main()
{
    struct st ob;
    struct st* ptr = &ob;

    cout << sizeof(*ptr);

    return 0;
}

Output:

16

Explanation:

We compiled the program on 32-bit based system.

Here, we created a structure, C++ uses structure padding and allocate space for variables block-wise, block size is 4 bytes for 32-bit based system.

In the main() function we created a structure variable ob, and a pointer ptr that contains the address of ob.  

cout<<sizeof(*ptr);

The above statement will print the size of the structure.

1st block is allocated for c1 that is 4 bytes.
2nd block is allocated for A that is 4 bytes.
3rd block is allocated for B that is 4 bytes.
4th block is allocated for c2 that is 4 bytes.

Then, the total size is "16" bytes will be printed on the console screen.






Comments and Discussions

Ad: Are you a blogger? Join our Blogging forum.





Languages: » C » C++ » C++ STL » Java » Data Structure » C#.Net » Android » Kotlin » SQL
Web Technologies: » PHP » Python » JavaScript » CSS » Ajax » Node.js » Web programming/HTML
Solved programs: » C » C++ » DS » Java » C#
Aptitude que. & ans.: » C » C++ » Java » DBMS
Interview que. & ans.: » C » Embedded C » Java » SEO » HR
CS Subjects: » CS Basics » O.S. » Networks » DBMS » Embedded Systems » Cloud Computing
» Machine learning » CS Organizations » Linux » DOS
More: » Articles » Puzzles » News/Updates


© https://www.includehelp.com some rights reserved.