亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

精通C语言结构体与指针:实战指南

精通C语言结构体与指针:实战指南

探索如何利用指针操作结构体成员,并学习动态内存分配以构建灵活的C数据结构。

深入结构体指针前,请熟悉以下基础主题:


使用指针引用结构体

下例展示如何声明结构体和引用它的指针。

struct Person {
    int member1;
    int member2;
    /* 更多成员 */
};
int main(void) {
    struct Person *ptr, harry;
    /* ptr 可指向任意 Person 实例 */
}

此处 ptr 是指向 struct Person 实例的指针。


示例:通过指针访问结构体成员

通过指针读写结构体字段,使用 -> 运算符。

#include <stdio.h>
struct Person {
    int age;
    float weight;
};
int main(void) {
    struct Person *personPtr, person1;
    personPtr = &person1; /* 指向 person1 */
    printf("输入年龄: ");
    scanf("%d", &personPtr->age);
    printf("输入体重: ");
    scanf("%f", &personPtr->weight);
    printf("\n显示:\n");
    printf("Age: %d\n", personPtr->age);
    printf("Weight: %f", personPtr->weight);
    return 0;
}

personPtr = &person1; 将 person1 地址存入 personPtr。随后用 personPtr->field 访问等价于 (*personPtr).field,语法更简洁。


结构体动态内存分配

编译时未知实例数量时,使用C标准库在运行时分配内存。

示例:分配结构体数组

#include <stdio.h>
#include <stdlib.h>
struct Person {
    int age;
    float weight;
    char name[30];
};
int main(void) {
    struct Person *ptr;
    int i, n;
    printf("输入人数: ");
    scanf("%d", &n);
    ptr = (struct Person*)malloc(n * sizeof(struct Person));
    if (!ptr) {
        fprintf(stderr, "内存分配失败\n");
        return EXIT_FAILURE;
    }
    for (i = 0; i < n; ++i) {
        printf("依次输入姓名和年龄: ");
        scanf("%s %d", (ptr + i)->name, &(ptr + i)->age);
    }
    printf("\n显示信息:\n");
    for (i = 0; i < n; ++i) {
        printf("Name: %s\tAge: %d\n", (ptr + i)->name, (ptr + i)->age);
    }
    free(ptr);
    return 0;
}

运行结果:

输入人数: 2
依次输入姓名和年龄: Harry 24
依次输入姓名和年龄: Gary 32
显示信息:
Name: Harry Age: 24
Name: Gary Age: 32

演示如何在堆上创建 n 个 struct Person 实例,读取用户输入并显示。



C语言

  1. C#关键字与标识符:规则、完整列表与最佳实践
  2. C# 类与对象:面向对象编程的基石
  3. 掌握 C# 抽象类与抽象方法:实战指南
  4. 理解 C# 分部类与分部方法
  5. 掌握 C# sealed 类与方法:用法、示例与代码安全性能提升
  6. 深入理解 C# 结构体:定义、用法与与类的核心差异
  7. C 语言关键字与标识符完全指南
  8. 精通C语言指针:专家级实战教程
  9. 深入理解C语言数组与指针的关系
  10. C语言函数参数传递:地址与指针实战指南
  11. 精通C语言结构体:定义、变量、访问与进阶示例
  12. C语言结构体进阶:传递、返回与引用处理