C strukturalar


ULASHISH

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
O‘zingiz sinab ko‘ring »

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
O‘zingiz sinab ko‘ring »

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!