# C 程序：在结构中动态存储数据

> 原文： [https://www.programiz.com/c-programming/examples/structure-dynamic-memory-allocation](https://www.programiz.com/c-programming/examples/structure-dynamic-memory-allocation)

#### 在此示例中，您将学习存储用户使用动态内存分配输入的信息。

要理解此示例，您应该了解以下 [C 编程](/c-programming "C tutorial")主题：

*   [C 指针](/c-programming/c-pointers)
*   [C 动态内存分配](/c-programming/c-dynamic-memory-allocation)
*   [C 结构](/c-programming/c-structures)

* * *

该程序要求用户存储`noOfRecords`的值，并使用`malloc()`函数为`noOfRecords`结构变量动态分配内存。

* * *

## 演示结构的动态内存分配

```c
#include <stdio.h>
#include <stdlib.h>
struct course {
    int marks;
    char subject[30];
};

int main() {
    struct course *ptr;
    int i, noOfRecords;
    printf("Enter the number of records: ");
    scanf("%d", &noOfRecords);

    // Memory allocation for noOfRecords structures
    ptr = (struct course *)malloc(noOfRecords * sizeof(struct course));
    for (i = 0; i < noOfRecords; ++i) {
        printf("Enter the name of the subject and marks respectively:\n");
        scanf("%s %d", &(ptr + i)->subject, &(ptr + i)->marks);
    }

    printf("Displaying Information:\n");
    for (i = 0; i < noOfRecords; ++i)
        printf("%s\t%d\n", (ptr + i)->subject, (ptr + i)->marks);

    return 0;
} 
```

**输出**

```c
Enter the number of records: 2
Enter the name of the subject and marks respectively:
Programming
22
Enter the name of the subject and marks respectively:
Structure
33

Displaying Information:
Programming      22
Structure        33 
```