Bird
Raised Fist0
Cprogramming~10 mins

Nested structures - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Nested structures
Define inner struct
↓
Define outer struct with inner struct inside
↓
Create outer struct variable
↓
Assign values to inner struct fields
↓
Assign values to outer struct fields
↓
Access and use nested fields
↓
Program output or further use
This flow shows how an inner structure is defined and used inside an outer structure, then how values are assigned and accessed step-by-step.
Execution Sample
C
struct Point {
    int x;
    int y;
};

struct Rectangle {
    struct Point topLeft;
    struct Point bottomRight;
};
Defines two structures: Point and Rectangle, where Rectangle contains two Points as nested structures.
Execution Table
StepActionVariable/FieldValueNotes
1Define struct PointPointDefinedStructure with fields x and y
2Define struct RectangleRectangleDefinedContains two Point structs: topLeft and bottomRight
3Create variable rect of type RectanglerectUninitializedMemory allocated for rect
4Assign rect.topLeft.x = 1rect.topLeft.x1Set x of topLeft point
5Assign rect.topLeft.y = 2rect.topLeft.y2Set y of topLeft point
6Assign rect.bottomRight.x = 3rect.bottomRight.x3Set x of bottomRight point
7Assign rect.bottomRight.y = 4rect.bottomRight.y4Set y of bottomRight point
8Access rect.topLeft.xrect.topLeft.x1Read value 1
9Access rect.bottomRight.yrect.bottomRight.y4Read value 4
10End of exampleAll nested fields assigned and accessed
💡 All nested structure fields assigned and accessed successfully.
Variable Tracker
VariableStartAfter Step 4After Step 5After Step 6After Step 7Final
rect.topLeft.xundefined11111
rect.topLeft.yundefinedundefined2222
rect.bottomRight.xundefinedundefinedundefined333
rect.bottomRight.yundefinedundefinedundefinedundefined44
Key Moments - 2 Insights
Why do we write rect.topLeft.x instead of just rect.x?
Because x is a field inside the nested struct Point, which is inside rect as topLeft. The execution_table rows 4 and 8 show accessing nested fields requires specifying each level.
Can we assign values to rect.topLeft and rect.bottomRight directly?
Yes, but only by assigning a whole Point struct. Here, we assign individual fields step-by-step as shown in rows 4 to 7 for clarity.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 6, what is the value of rect.bottomRight.x?
A3
B4
C2
Dundefined
💡 Hint
Check the 'Value' column at step 6 in the execution_table.
At which step is rect.topLeft.y assigned a value?
AStep 4
BStep 5
CStep 6
DStep 7
💡 Hint
Look for assignment actions to rect.topLeft.y in the execution_table.
If we tried to access rect.x directly, what would happen?
AIt would give the value of rect.topLeft.x
BIt would give the value of rect.bottomRight.x
CIt would cause a compile error
DIt would return zero
💡 Hint
Recall that x is inside nested structs, not directly inside rect; see key_moments explanation.
Concept Snapshot
Nested structures in C allow one struct to contain another.
Use dot notation to access inner fields: outer.inner.field.
Assign values step-by-step to nested fields.
Access nested fields by specifying each level.
Useful for grouping related data hierarchically.
Full Transcript
This example shows how nested structures work in C. First, we define an inner struct Point with fields x and y. Then, we define an outer struct Rectangle that contains two Points named topLeft and bottomRight. We create a variable rect of type Rectangle. We assign values to each nested field step-by-step: rect.topLeft.x, rect.topLeft.y, rect.bottomRight.x, and rect.bottomRight.y. Finally, we access these nested fields to use their values. This demonstrates how to organize data inside nested structures and how to access and assign their fields correctly.

Practice

(1/5)
1. What is a nested structure in C programming?
easy
A. A structure that contains another structure as a member
B. A structure with only one member
C. A structure declared inside a function
D. A structure that uses pointers only

Solution

  1. Step 1: Understand structure composition

    A nested structure means one structure is included inside another as a member.
  2. Step 2: Rule out distractors

    The other options describe unrelated concepts: a structure using pointers only, with only one member, or declared inside a function.
  3. Final Answer:

    A structure that contains another structure as a member -> Option A
  4. Quick Check:

    Nested structure = structure inside structure [OK]
Hint: Nested means one structure inside another [OK]
Common Mistakes:
  • Thinking nested means pointer usage
  • Confusing nested with single-member structures
  • Assuming nested means declared inside functions
2. Which of the following is the correct syntax to access a member of a nested structure in C?
easy
A. outer.inner->member
B. outer->inner->member
C. outer.inner.member
D. outer->inner.member

Solution

  1. Step 1: Identify access operator for nested structures

    When using nested structures (not pointers), use dot notation for each level: outer.inner.member.
  2. Step 2: Understand pointer vs non-pointer access

    Arrow (->) is used only when accessing members through pointers, which is not stated here.
  3. Final Answer:

    outer.inner.member -> Option C
  4. Quick Check:

    Use dot for nested struct members [OK]
Hint: Use dot notation for nested struct members [OK]
Common Mistakes:
  • Using arrow (->) when not using pointers
  • Mixing dot and arrow incorrectly
  • Confusing member access syntax
3. What is the output of the following C code?
typedef struct {
    int day;
    int month;
    int year;
} Date;

typedef struct {
    char name[20];
    Date birthday;
} Person;

int main() {
    Person p = {"Alice", {15, 8, 1990}};
    printf("%d-%d-%d", p.birthday.day, p.birthday.month, p.birthday.year);
    return 0;
}
medium
A. 15-8-1990
B. Alice-15-8
C. 1990-8-15
D. Compilation error

Solution

  1. Step 1: Understand structure initialization

    Person p is initialized with name "Alice" and birthday as Date {15, 8, 1990}.
  2. Step 2: Trace printf output

    printf prints p.birthday.day (15), p.birthday.month (8), p.birthday.year (1990) separated by dashes.
  3. Final Answer:

    15-8-1990 -> Option A
  4. Quick Check:

    Print nested struct members correctly [OK]
Hint: Access nested members with dot notation [OK]
Common Mistakes:
  • Printing name instead of date
  • Mixing order of day, month, year
  • Forgetting to initialize nested struct
4. Identify the error in this nested structure code snippet:
struct Address {
    char city[20];
    int zip;
};

struct Employee {
    char name[30];
    struct Address addr;
};

int main() {
    struct Employee emp;
    emp.addr->zip = 12345;
    return 0;
}
medium
A. Missing semicolon after struct definitions
B. Using '->' operator on a non-pointer structure variable
C. Incorrect declaration of nested structure
D. Cannot assign integer to zip member

Solution

  1. Step 1: Check member access syntax

    emp.addr is a structure variable, not a pointer, so '->' operator is invalid here.
  2. Step 2: Correct operator usage

    Use dot operator '.' to access zip: emp.addr.zip = 12345;
  3. Final Answer:

    Using '->' operator on a non-pointer structure variable -> Option B
  4. Quick Check:

    Use '.' for struct variables, '->' for pointers [OK]
Hint: Use '.' for struct, '->' only for pointers [OK]
Common Mistakes:
  • Using '->' on struct variables
  • Confusing pointer and non-pointer access
  • Ignoring compiler error messages
5. Given the following nested structures, how would you write a function in C that takes a Person and returns the birth year?
typedef struct {
    int day;
    int month;
    int year;
} Date;

typedef struct {
    char name[50];
    Date birthday;
} Person;

// Function prototype here
Which of the following is the correct function definition?
hard
A. int getBirthYear(Person *p) { return p.birthday->year; }
B. int getBirthYear(Person *p) { return p->birthday.year; }
C. int getBirthYear(Person p) { return p.year; }
D. int getBirthYear(Person p) { return p.birthday.year; }

Solution

  1. Step 1: Understand parameter passing

    The function takes a Person by value, so use dot notation to access members.
  2. Step 2: Access nested member correctly

    Access birthday.year as p.birthday.year since p is not a pointer.
  3. Final Answer:

    int getBirthYear(Person p) { return p.birthday.year; } -> Option D
  4. Quick Check:

    Use dot for struct value parameters [OK]
Hint: Use dot for struct, arrow for pointer parameters [OK]
Common Mistakes:
  • Using arrow (->) on non-pointer parameter
  • Accessing wrong member name
  • Confusing pointer and value parameter syntax
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard