स्ट्रक्चर की सरणी क्या है?
एक ही प्रकार के कई स्ट्रक्चर चरों को सरणी के रूप में संगठित करना। यह सबसे आम उपयोग है स्ट्रक्चर का।
घोषणा
// 1. पहले स्ट्रक्चर परिभाषित करें
struct Student {
int id;
char name[30];
float percentage;
};
// 2. फिर सरणी घोषित करें
struct Student record[3]; // 3 छात्रों की सरणी
एक्सेस करना
record[0].id- पहला छात्र की आईडीrecord[1].name- दूसरा छात्र का नामrecord[i].percentage- i-वें छात्र का प्रतिशत
पूर्ण C प्रोग्राम
#include <stdio.h>
#include <string.h>
struct Student {
int id;
char name[30];
float percentage;
};
int main() {
struct Student record[3];
int i;
// डेटा दर्ज (हार्डकोडेड उदाहरण)
record[0].id = 1;
strcpy(record[0].name, "Bhanu");
record[0].percentage = 86.5;
record[1].id = 2;
strcpy(record[1].name, "Priya");
record[1].percentage = 90.5;
record[2].id = 3;
strcpy(record[2].name, "Hari");
record[2].percentage = 81.5;
// प्रिंट
for (i = 0; i < 3; i++) {
printf("छात्र %d का रिकॉर्ड:\n", i+1);
printf(" ID: %d\n", record[i].id);
printf(" नाम: %s\n", record[i].name);
printf(" प्रतिशत: %.2f\n\n", record[i].percentage);
}
return 0;
}
आउटपुट
छात्र 1 का रिकॉर्ड: ID: 1 नाम: Bhanu प्रतिशत: 86.50 छात्र 2 का रिकॉर्ड: ID: 2 नाम: Priya प्रतिशत: 90.50 छात्र 3 का रिकॉर्ड: ID: 3 नाम: Hari प्रतिशत: 81.50
रनटाइम इनपुट के साथ संस्करण
int main() {
int n;
printf("छात्रों की संख्या: ");
scanf("%d", &n);
struct Student *records = malloc(n * sizeof(struct Student));
if (!records) return 1;
for (int i = 0; i < n; i++) {
printf("\nछात्र %d:\n", i+1);
printf(" ID: "); scanf("%d", &records[i].id);
printf(" नाम: "); scanf(" %29[^\n]", records[i].name);
printf(" प्रतिशत: "); scanf("%f", &records[i].percentage);
}
// प्रिंट...
free(records);
return 0;
}
मेमोरी लेआउट
record[0]: [id:4][name:30][percentage:4] = 38 बाइट्स (पैडिंग सहित ~40) record[1]: [id:4][name:30][percentage:4] record[2]: [id:4][name:30][percentage:4] सन्निहित मेमोरी ब्लॉक
सामान्य ऑपरेशन्स
| ऑपरेशन | कोड |
|---|---|
| खोज | for(i=0;i<n;i++) if(rec[i].id==key) ... |
| सॉर्ट (नाम से) | qsort(rec, n, sizeof(rec[0]), cmpName); |
| फाइल में लिखना | fwrite(rec, sizeof(rec[0]), n, fp); |
| फाइल से पढ़ना | fread(rec, sizeof(rec[0]), n, fp); |
महत्वपूर्ण नोट्स
strcpyके बजायstrncpyयाsnprintfउपयोग करें (बफर ओवरफ्लो रोकथाम)।- बड़ी सरणी के लिए डायनामिक आवंटन (
malloc) बेहतर। - स्ट्रक्चर पैडिंग के कारण आकार सदस्यों के योग से अधिक हो सकता है।