C strukturalar
Strukturalar
Strukturalar (struct deb ham ataladi) bir nechta o‘zaro bog‘liq o‘zgaruvchilarni bir joyga guruhlash usulidir.
Strukturadagi har bir o‘zgaruvchi strukturaning a’zosi (member) deb ataladi.
Massivdan farqli o‘laroq, struktura turli xil ma’lumot tiplarini (int, float, char va h.k.) o‘z ichiga olishi mumkin.
Struktura yaratish
Strukturani struct kalit so‘zi yordamida yaratib, uning har bir a’zosini jingalak qavslar ichida e’lon qilishingiz mumkin:
struct MyStructure { // Structure declaration
int myNum; // Member (int variable)
char myLetter; // Member (char variable)
}; // End the structure with a semicolon
Strukturadan foydalanish uchun uning o‘zgaruvchisini yaratishingiz kerak.
main() metodi ichida struct kalit so‘zini, undan keyin struktura nomini va so‘ng struktura o‘zgaruvchisining nomini yozing:
"s1" nomli struct o‘zgaruvchisini yarating:
struct myStructure {
int myNum;
char myLetter;
};
int main() {
struct myStructure s1;
return 0;
}
Struktura a’zolariga murojaat qilish
Struktura a’zolariga murojaat qilish uchun nuqta sintaksisidan (.) foydalaning:
Misol
// Create a structure called myStructure
struct myStructure {
int myNum;
char myLetter;
};
int main() {
// Create a structure variable of myStructure called s1
struct myStructure s1;
// Assign values to members of s1
s1.myNum = 13;
s1.myLetter = 'B';
// Print values
printf("My number: %d\n", s1.myNum);
printf("My letter: %c\n", s1.myLetter);
return 0;
}
O‘zingiz sinab ko‘ring »
Endi faqat bitta strukturadan foydalanib, turli qiymatlarga ega bir nechta struktura o‘zgaruvchisini osongina yaratishingiz mumkin:
Misol
// Create different struct variables
struct myStructure s1;
struct myStructure s2;
// Assign values to different struct variables
s1.myNum = 13;
s1.myLetter = 'B';
s2.myNum = 20;
s2.myLetter = 'C';
O‘zingiz sinab ko‘ring »
Strukturalardagi stringlar-chi?
Esda tuting, C tilida stringlar aslida belgilar massivi hisoblanadi va afsuski, massivga quyidagicha qiymat o‘zlashtirib bo‘lmaydi:
Misol
struct myStructure {
int myNum;
char myLetter;
char myString[30]; // String
};
int main() {
struct myStructure s1;
// Trying to assign a value to the string
s1.myString = "Some text";
// Trying to print the value
printf("My string: %s", s1.myString);
return 0;
}
Xato yuz beradi:
prog.c:12:15: error: assignment to expression with array type
Biroq buning yechimi bor! strcpy() funksiyasidan foydalanib, qiymatni s1.myString a’zosiga quyidagicha o‘zlashtirishingiz mumkin:
Misol
struct myStructure {
int myNum;
char myLetter;
char myString[30]; // String
};
int main() {
struct myStructure s1;
// Assign a value to the string using the strcpy function
strcpy(s1.myString, "Some text");
// Print the value
printf("My string: %s", s1.myString);
return 0;
}
Natija:
My string: Some text
Soddaroq sintaksis
Struktura o‘zgaruvchisi a’zolariga qiymatlarni e’lon qilish paytida, bitta qatorda ham berishingiz mumkin.
Shunchaki qiymatlarni jingalak qavslar {} ichida vergul bilan ajratilgan ro‘yxat ko‘rinishida yozing. E’tibor bering, bu usulda string qiymatlar uchun strcpy() funksiyasidan foydalanish shart emas:
Misol
// Create a structure
struct myStructure {
int myNum;
char myLetter;
char myString[30];
};
int main() {
// Create a structure variable and assign values to it
struct myStructure s1 = {13, 'B', "Some text"};
// Print values
printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);
return 0;
}
O‘zingiz sinab ko‘ring »
Eslatma: Kiritilgan qiymatlar tartibi strukturada e’lon qilingan o‘zgaruvchi tiplari tartibiga mos kelishi kerak (int uchun 13, char uchun 'B' va h.k.).
Strukturalarni nusxalash
Bir strukturani boshqasiga o‘zlashtirish ham mumkin.
Quyidagi misolda s1 qiymatlari s2 ga nusxalanadi:
Misol
struct myStructure s1 = {13, 'B', "Some text"};
struct myStructure s2;
s2 = s1;
O‘zingiz sinab ko‘ring »
Qiymatlarni o‘zgartirish
Qiymatni o‘zgartirmoqchi bo‘lsangiz, nuqta sintaksisidan (.) foydalanishingiz mumkin.
String qiymatni o‘zgartirish uchun esa yana strcpy() funksiyasi qo‘l keladi:
Misol
struct myStructure {
int myNum;
char myLetter;
char myString[30];
};
int main() {
// Create a structure variable and assign values to it
struct myStructure s1 = {13, 'B', "Some text"};
// Modify values
s1.myNum = 30;
s1.myLetter = 'C';
strcpy(s1.myString, "Something else");
// Print values
printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);
return 0;
}
O‘zingiz sinab ko‘ring »
Qiymatlarni o‘zgartirish, ayniqsa, struktura qiymatlarini nusxalaganda foydali:
Misol
// Create a structure variable and assign values to it
struct myStructure s1 = {13, 'B', "Some text"};
// Create another structure variable
struct myStructure s2;
// Copy s1 values to s2
s2 = s1;
// Change s2 values
s2.myNum = 30;
s2.myLetter = 'C';
strcpy(s2.myString, "Something else");
// Print values
printf("%d %c %s\n", s1.myNum, s1.myLetter, s1.myString);
printf("%d %c %s\n", s2.myNum, s2.myLetter, s2.myString);
O‘zingiz sinab ko‘ring »
Xo‘sh, strukturalar qanday foyda beradi?
Tasavvur qiling, avtomobillar haqidagi turli ma’lumotlarni, masalan, markasi, modeli va ishlab chiqarilgan yilini saqlaydigan dastur yozishingiz kerak. Strukturalarning afzalligi shundaki, bitta "avtomobil shabloni"ni yaratib, undan har bir avtomobil uchun foydalanishingiz mumkin. Hayotiy misolni quyida ko‘ring.
Hayotiy misol
Avtomobillar haqidagi turli ma’lumotlarni saqlash uchun strukturadan foydalaning:
Misol
struct Car {
char brand[30];
char model[30];
int year;
};
int main() {
struct Car car1 = {"BMW", "X5", 1999};
struct Car car2 = {"Ford", "Mustang", 1969};
struct Car car3 = {"Toyota", "Corolla", 2011};
printf("%s %s %d\n", car1.brand, car1.model, car1.year);
printf("%s %s %d\n", car2.brand, car2.model, car2.year);
printf("%s %s %d\n", car3.brand, car3.model, car3.year);
return 0;
}
O‘zingiz sinab ko‘ring »
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
