Struktuuride pesastamisel on oluline, et kompilaator oleks struktuuri liikmeka kasutatav andmetüüp juba “tuttav”. Seda saab teha kas lisades koodi täieliku struktuuri deklaratsiooni (nagu on tehtud järgnevas näites) või pakkudes struktuuri eeldeklratsiooni (forward declaration), eeldusel, struktuuri sisu kirjeldus eksisteerib.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
/** * File: car_return.c * Author: Risto Heinsar * Created: 02.02.2015 * Modified 31.01.2025 * * Description: This is an example code showing creation of a nested struct */ #include <stdio.h> #include <string.h> #define REG_LEN 8 #define FIELD_LEN 32 typedef struct Vehicle { char make[FIELD_LEN]; char model[FIELD_LEN]; } Vehicle; typedef struct CarRegistryEntry { char regNum[REG_LEN]; char regCity[FIELD_LEN]; char owner[FIELD_LEN]; int year; Vehicle car; } CarRegistryEntry; void PrintCar(CarRegistryEntry motor); void PrintCarUsingPtr(CarRegistryEntry *car); int main(void) { CarRegistryEntry indestructibleHilux; strcpy(indestructibleHilux.regNum,"E473CJN"); strcpy(indestructibleHilux.regCity,"London"); strcpy(indestructibleHilux.owner,"The Stig"); indestructibleHilux.year = 1988; strcpy(indestructibleHilux.car.make,"Toyota"); strcpy(indestructibleHilux.car.model,"Hilux"); PrintCar(indestructibleHilux); PrintCarUsingPtr(&indestructibleHilux); return 0; } /** * Description: Outputs the details of an automobile using . notation * * Parameters: motor, vehicle structure with the details of a car * * Return: none */ void PrintCar(CarRegistryEntry motor) { printf("%s %s, reg number %s, belongs to %s and is registered in %s\n", motor.car.make, motor.car.model, motor.regNum, motor.owner, motor.regCity); } /** * Description: Outputs the details of an automobile using -> notation * * Parameters: motor, vehicle structure with the details of a car * * Return: none */ void PrintCarUsingPtr(CarRegistryEntry *motor) { printf("%s %s, reg number %s, belongs to %s and is registered in %s\n", motor->car.make, motor->car.model, motor->regNum, motor->owner, motor->regCity); } |