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 માંગે છે
| પાસું | Structure | Union |
|---|---|---|
| Memory | દરેક member ની પોતાની જગ્યા | બધા members એક block વહેંચે છે |
| Size | members નો સરવાળો (+ padding) | ફક્ત સૌથી મોટો member |
| એકસાથે જીવંત | બધા members એકસાથે | ફક્ત છેલ્લે-લખેલો member |
| બીજા વાંચવા | હંમેશા valid | Garbage (overwrite થયેલા bytes) |
| કોના માટે સારું | Records: student, employee | Memory-ઓછી, ઘણામાંથી એક 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 ક્યારે સાચી પસંદગી છે?
- જ્યારે એક variable એક વખતે ઘણા types માંથી ફક્ત એક રાખે છે અને memory કીમતી છે
- જ્યારે પણ તમે members સુધી ઝડપી access ઇચ્છો
- જ્યારે બધા members ને સાથે values રાખવી હોય
- ક્યારેય નહીં: 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 થાય છે?
- struct 10 print કરે છે; union garbage print કરે છે
- બંને 10 print કરે છે
- બંને garbage print કરે છે
- 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 વાળો એક ઓરડો.