# 结构和指针

> 原文： [https://www.programiz.com/c-programming/c-structures-pointers](https://www.programiz.com/c-programming/c-structures-pointers)

#### 在本教程中，您将学习在 C 编程中使用指针访问结构的成员。 您还将学习动态分配结构类型的内存。

在了解如何将指针与结构一起使用之前，请务必阅读以下教程：

*   [C 指针](/c-programming/c-pointers "C Pointers")
*   [C 结构](/c-programming/c-structures "C structs")

* * *

## C 指向结构的指针

这是创建结构指针的方法。

```c
struct name {
    member1;
    member2;
    .
    .
};

int main()
{
    struct name *ptr, Harry;
}
```

这里，`ptr`是指向`struct`的指针。

* * *

## 示例：使用指针访问成员

要使用指针访问结构的成员，我们使用`->`运算符。

```c
#include <stdio.h>
struct person
{
   int age;
   float weight;
};

int main()
{
    struct person *personPtr, person1;
    personPtr = &person1;   

    printf("Enter age: ");
    scanf("%d", &personPtr->age);

    printf("Enter weight: ");
    scanf("%f", &personPtr->weight);

    printf("Displaying:\n");
    printf("Age: %d\n", personPtr->age);
    printf("weight: %f", personPtr->weight);

    return 0;
}
```

在此示例中，使用`personPtr = &person1;`将`person1`的地址存储在`personPtr`指针中。

现在，您可以使用`personPtr`指针访问`person1`的成员。

顺便说说，

*   `personPtr->age`等同于`(*personPtr).age`
*   `personPtr->weight`等同于`(*personPtr).weight`

* * *

## 结构的动态内存分配

在继续本节之前，建议您检查 [C 动态内存分配](https://www.programiz.com/c-programming/c-dynamic-memory-allocation)。

有时，您声明的结构变量的数量可能不足。 您可能需要在运行时分配内存。 这是您可以在 C 编程中实现此目标的方法。

### 示例：结构的动态内存分配

```c
#include <stdio.h>
#include <stdlib.h>
struct person {
   int age;
   float weight;
   char name[30];
};

int main()
{
   struct person *ptr;
   int i, n;

   printf("Enter the number of persons: ");
   scanf("%d", &n);

   // allocating memory for n numbers of struct person
   ptr = (struct person*) malloc(n * sizeof(struct person));

   for(i = 0; i < n; ++i)
   {
       printf("Enter first name and age respectively: ");

       // To access members of 1st struct person,
       // ptr->name and ptr->age is used

       // To access members of 2nd struct person,
       // (ptr+1)->name and (ptr+1)->age is used
       scanf("%s %d", (ptr+i)->name, &(ptr+i)->age);
   }

   printf("Displaying Information:\n");
   for(i = 0; i < n; ++i)
       printf("Name: %s\tAge: %d\n", (ptr+i)->name, (ptr+i)->age);

   return 0;
} 
```

运行该程序时，输出为：

```c
Enter the number of persons:  2
Enter first name and age respectively:  Harry 24
Enter first name and age respectively:  Gary 32
Displaying Information:
Name: Harry	Age: 24
Name: Gary	Age: 32
```

在上面的示例中，创建了`n`个结构变量，其中用户输入了`n`。

为了为`struct person`的`n`个分配内存，我们使用了，

```c
ptr = (struct person*) malloc(n * sizeof(struct person));
```

然后，我们使用`ptr`指针访问`person`的元素。