Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Struct med Arrayer och Andra Structar | Avancerad Användning Av Structs
C-Strukturer
Avsnitt 4. Kapitel 2
single

single

Struct med Arrayer och Andra Structar

Svep för att visa menyn

I vissa strukturer blir det nödvändigt att använda en array av nästlade strukturer när ett objekt innehåller flera relaterade delobjekt. Om en student till exempel kan gå flera kurser är det logiskt att representera kurserna som en array av strukturer inuti Student-strukturen.

Exempelsyntax:

OuterStruct.NestedStruct[1].NestedField;

För att komma åt ett element i den nästlade strukturarrayen refererar du först till den yttre strukturen, använder sedan ett index för att välja önskat element i arrayen och slutligen kommer du åt ett specifikt fält i det elementet.

Praktiskt exempel

Föreställ dig att varje student har ett namn, en ålder och en uppsättning kurser. Varje kurs innehåller sin titel, instruktör och antal poäng.

main.c

main.c

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
#include <stdio.h> #include <string.h> struct Course { char name[50]; char instructor[50]; int credits; }; struct Student { char name[50]; int age; struct Course courses[3]; // array of nested structures }; int main() { struct Student student; // Initialize student strcpy(student.name, "Alice Johnson"); student.age = 20; // Initialize courses strcpy(student.courses[0].name, "Mathematics"); strcpy(student.courses[0].instructor, "Dr. Smith"); student.courses[0].credits = 4; strcpy(student.courses[1].name, "Computer Science"); strcpy(student.courses[1].instructor, "Prof. Brown"); student.courses[1].credits = 3; strcpy(student.courses[2].name, "History"); strcpy(student.courses[2].instructor, "Dr. Green"); student.courses[2].credits = 2; // Display information printf("Student: %s\n", student.name); printf("Age: %d\n", student.age); printf("Courses:\n"); for (int i = 0; i < 3; i++) { printf(" Course %d: %s, Instructor: %s, Credits: %d\n", i + 1, student.courses[i].name, student.courses[i].instructor, student.courses[i].credits); } // Example of accessing a specific nested field printf("\nInstructor of the second course: %s\n", student.courses[1].instructor); return 0; }

I det här exemplet har strukturen Student en courses-array med tre element av typen Course. Varje kurs har sin egen titel, instruktör och antal poäng. För att komma åt en specifik kurs används arrayindex och punktoperatorn: student.courses[1].instructor.

Att använda arrayer av nästlade strukturer är användbart för att representera objekt med upprepade delobjekt, såsom studenter med kurser, butiker med produkter eller böcker med författare.

Uppgift

Svep för att börja koda

Studenten representeras av en struktur Student som innehåller en array med fast storlek av inbäddade strukturer Course. Varje kurs har ett namn, en instruktör och ett antal poäng. Funktionen ska iterera genom alla kurser och summera poängen.

Implementera en funktion calculateTotalCredits med returtypen int.

  1. Skapa en int-variabel total inuti funktionen och initiera den till 0.
  2. Använd en for-loop för att iterera från 0 till antalet kurser (3).
  3. För varje kurs, hämta värdet för credits och lägg till det i total.
  4. Returnera det slutliga värdet av total.

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 2
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

some-alt