Difference between structure and union

Structure સામે union એક line માં: struct દરેક member ને એની પોતાની memory આપે છે (size = સરવાળો) જેથી બધા સાથે રહે; union members ને એક block વહેંચાવે છે (size = સૌથી મોટો) જેથી ફક્ત છેલ્લે-લખેલો જીવંત રહે.

9 min read · 10 cards · 3 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

એક keyword, બે વિચારસરણી

પાછલો lesson એક કોયડા પર પૂરો થયો: struct અને union એકસરખો syntax વહેંચે છે, braces, members, dots, તોય અલગ પ્રજાતિ જેવું વર્તન કરે છે.

Exams આ જોડીને બહુ પસંદ કરે છે: "structure અને union માં તફાવત જણાવો" એટલા ભરોસાથી આવે છે કે seniors એને મફત marks કહે છે.

આજે: comparison table, sizeof નો પુરાવો, અને એ એક વાક્ય જે બંનેને કાયમ માટે ઉકેલી નાખે છે. વાક્યમાં એક hostel છે.

Theory

અલગ ઓરડા સામે એક વહેંચાયેલો ઓરડો

એક struct એ hostel wing છે: દરેક member ને પોતાનો ઓરડો મળે છે, બધા એક જ સમયે ત્યાં રહી શકે છે, અને wing નું size ઓરડાઓનો સરવાળો છે. એક union એ એક જ ઓરડો છે જેનું nameplate ફરે છે: જે અંદર આવે એ પાછલા રહેવાસીનો સામાન બહાર ફેંકી દે છે. એનું size? બસ એટલું મોટું કે સૌથી મોટો શક્ય રહેવાસી સમાઈ જાય. ઇમારતનું રૂપ એ જ; રહેવાની નીતિ ઉલટી.

At a glance

જે comparison exams માંગે છે

પાસુંStructureUnion
Memoryદરેક member ની પોતાની જગ્યાબધા members એક block વહેંચે છે
Sizemembers નો સરવાળો (+ padding)ફક્ત સૌથી મોટો member
એકસાથે જીવંતબધા members એકસાથેફક્ત છેલ્લે-લખેલો member
બીજા વાંચવાહંમેશા validGarbage (overwrite થયેલા bytes)
કોના માટે સારુંRecords: student, employeeMemory-ઓછી, ઘણામાંથી એક value

Practical

sizeof નો પુરાવો

#include <stdio.h>

struct sBox { int i; float f; char c; };
union  uBox { int i; float f; char c; };

int main() {
    printf("struct: %lu bytes\n", sizeof(struct sBox));
    printf("union : %lu bytes\n", sizeof(union uBox));
    return 0;
}

This example runs in Gri-Learn on the web, where you can edit it and see the output.

Think first

બંને sizes નું અનુમાન કરો

એ જ ત્રણ members: int (4), float (4), char (1). Reveal પહેલાં બંને sizeof પરિણામ તર્કથી કાઢો. (Hint: એક માટે સરવાળો, બીજા માટે સૌથી મોટો, અને C pad કરી શકે.)

Show the answer

struct: 4 + 4 + 1 = 9, મોટા ભાગના compilers માં pad થઈને 12 (members 4-byte boundaries પર aligned). union: સૌથી મોટો member 4 bytes નો છે, તો 4.

"members નો સરવાળો, કદાચ pad કરેલો" સામે "સૌથી મોટા member નું size" લખો અને sizeof સવાલ પૂરો કમાઈ લીધો. 12-સામે-4 નો ફરક એ જ તફાવત છે, numbers માં.

Quiz

struct ને બદલે UNION ક્યારે સાચી પસંદગી છે?

  1. જ્યારે એક variable એક વખતે ઘણા types માંથી ફક્ત એક રાખે છે અને memory કીમતી છે
  2. જ્યારે પણ તમે members સુધી ઝડપી access ઇચ્છો
  3. જ્યારે બધા members ને સાથે values રાખવી હોય
  4. ક્યારેય નહીં: unions જૂના થઈ ગયા છે
Show the answer

જ્યારે એક variable એક વખતે ઘણા types માંથી ફક્ત એક રાખે છે અને memory કીમતી છે

Union નું એક જ કૌશલ્ય છે કરકસર: એક sensor reading જે કાં તો int હોય કાં float (ક્યારેય બંને નહીં) ને ફક્ત મોટી જગ્યા જોઈએ, સરવાળો નહીં, embedded systems અને device programming માં સોનું. members ને સાથે જોઈવા (option C) એ બરાબર struct નું કામ છે. અહીંના choice સવાલ બરાબર આ કાં/કાં નિર્ણય test કરે છે.

Quiz

struct sBox s; s.i = 10; s.f = 2.5; printf("%d", s.i); સામે એ જ ક્રમ union uBox u પર. દરેક કિસ્સામાં શું print થાય છે?

  1. struct 10 print કરે છે; union garbage print કરે છે
  2. બંને 10 print કરે છે
  3. બંને garbage print કરે છે
  4. struct garbage print કરે છે; union 10 print કરે છે
Show the answer

struct 10 print કરે છે; union garbage print કરે છે

struct માં, i અને f અલગ ઓરડામાં રહે છે: f લખવું i ને અડી શકતું નથી, તો 10 બચી જાય છે. union માં એ એક ઓરડો છે: u.f = 2.5 એ 10 ને કાઢી મૂક્યું, અને u.i વાંચવું float bytes ને ફરી વાંચે છે, garbage. આ જોડીવાળો trace એ "ઉદાહરણથી તફાવત બતાવો" નો સૌથી સાફ જવાબ છે.

Watch out

Marks ક્યાં કપાય છે

padding જણાવ્યા વગર struct ના ચોક્કસ sizes લખવા: કહો "members નો સરવાળો, સાથે શક્ય alignment padding", પ્રામાણિક પૂરા-mark વાળી phrasing. unions ને ઝડપી કહેવા: એમનો ગુણ SIZE છે, speed નહીં. union ને ઘણી values થી initialize કરવું: ફક્ત પહેલો member initialize થઈ શકે ({10} ચાલે, {10, 2.5} નહીં). અને table વાળા જવાબમાં, use-case વાળી row હંમેશા સામેલ કરો, ત્યાં જ પાંચમો mark છુપાયેલો છે.

Theory

Subject, પૂરો

પાછળ હટીને જુઓ: marks program એ એક hard-coded line print કરતાં શરૂ કર્યું, અને student records ના એક array તરીકે પૂરું થાય છે જેને એ વાંચી, grade, sort અને report કરી શકે, syllabus ના દરેક construct નો ઉપયોગ કરતાં. એ program જ તમારું revision છે: exam પહેલાં એને યાદથી ફરી બનાવો, અને દરેક unit પોતાને ફરી ભણાવી દે છે. આગળના semester, Python (BCA204) તમને હસાવશે કે તમે પહેલેથી કેટલું સમજો છો.

Summary

Key takeaways

  • Struct: દરેક member ની અલગ memory; size = સરવાળો (+ padding); બધા સાથે જીવંત.
  • Union: એક વહેંચાયેલો block; size = સૌથી મોટો member; ફક્ત છેલ્લે-લખેલો member valid.
  • sizeof પુરાવો: {int, float, char} → struct ~12 (padded), union 4.
  • Union initialization ફક્ત પહેલા member ને અડે છે.
  • Records માટે struct પસંદ કરો (default); memory ના દબાણમાં ઘણામાંથી-એક values માટે union.
  • યાદ રાખવાની યુક્તિ: અલગ ઓરડા સામે ફરતા nameplate વાળો એક ઓરડો.

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Functions and Structure

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Difference between structure and union · Computer Programming and Programming Methodology (CPPM) · Gri-Learn