前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言中的结构体:从定义到传递

C语言中的结构体:从定义到传递

原创
作者头像
薛慕昭
发布2024-04-16 21:34:45
2790
发布2024-04-16 21:34:45
举报

前言

结构体是C语言中一种重要的数据类型,它允许我们将不同类型的数据组合成一个整体,并以自定义的方式进行操作。通过结构体,我们可以更加灵活地管理和处理复杂的数据结构,从而提高程序的可读性和可维护性。本篇博客将从结构体的定义开始,逐步介绍其在C语言中的应用,包括结构体变量的定义和初始化、结构体成员的访问、结构体作为函数参数的传递等内容,帮助读者深入理解C语言中结构体的核心概念和用法。接下来我们来详细解释一下

概述

  • 有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性
  • 这时候可通过结构体实现
  • 结构体(struct)可以理解为用户自定义的特殊的复合的“数据类型”

结构体变量的定义和初始化

  • 定义结构体变量的方式:
  • 先声明结构体类型再定义变量名
  • 在声明类型的同时定义变量
  • 语法格式:
代码语言:c
复制
// 先声明结构体类型再定义变量名
struct 结构体名 {
    成员列表
};
struct 结构体名 变量名;

// 在声明类型的同时定义变量
struct 结构体名 {
    成员列表
}变量名;
  • 示例代码:
代码语言:c
复制
// 结构体类型的定义
struct stu {
    char name[50];
    int age;
};

// 先定义类型,再定义变量(常用)
struct stu s1 = {"mike", 18};

// 定义类型同时定义变量
struct stu2 {
    char name[50];
    int age;
}s2 = {"yoyo", 19};

结构体成员的使用

  • 如果是结构体变量,通过 . 操作成员
  • 如果是结构体指针变量,通过 -> 操作成功
代码语言:c
复制
#include <stdio.h>
#include <string.h>

// 结构体类型的定义
struct stu {
    char name[50];
    int age;
};

int main() {
    // 定义结构体变量,同时初始化
    struct stu s = {"mike", 18};
    // 打印成员变量
    printf("%s, %d\n", s.name, (&s)->age);
    // 修改成功变量的内容
    strcpy(s.name, "yoyo");
    s.age = 19;
    // 打印成员变量
    printf("%s, %d\n", s.name, (&s)->age);

    return 0;
}

结构体做函数参数

结构体值传参

  • 传值是指将参数的值拷贝一份传递给函数,函数内部对该参数的修改不会影响到原来的变量

示例代码:

代码语言:c
复制
#include <stdio.h>
#include <string.h>

// 结构体类型的定义
struct stu {
    char name[50];
    int age;
};

// 函数定义
void func(struct stu temp) {
    strcpy(temp.name, "yoyo");
    temp.age = 20;
    printf("函数内部:%s, %d\n", temp.name, temp.age);
}

int main() {
    // 定义结构体变量
    struct stu s = {"mike", 18};
    // 调用函数,值传递
    func(s);
    // 打印成员变量
    printf("函数外部:%s, %d\n", s.name, (&s)->age);

    return 0;
}

运行结果:

代码语言:shell
复制
函数内部:yoyo, 20
函数外部:mike, 18

结构体地址传递

  • 传址是指将参数的地址传递给函数,函数内部可以通过该地址来访问原变量,并对其进行修改。

示例代码:

代码语言:c
复制
#include <stdio.h>
#include <string.h>

// 结构体类型的定义
struct stu {
    char name[50];
    int age;
};

// 函数定义
void func(struct stu *p) {
    strcpy(p->name, "yoyo");
    p->age = 20;
    printf("函数内部:%s, %d\n", p->name, p->age);
}

int main() {
    // 定义结构体变量
    struct stu s = {"mike", 18};
    // 调用函数,地址传递
    func(&s);
    // 打印成员变量
    printf("函数外部:%s, %d\n", s.name, (&s)->age);

    return 0;
}

运行结果:

代码语言:c
复制
函数内部:yoyo, 20
函数外部:yoyo, 20

接下来我们来写一个小案例练习

题目:定义一个结构体Person,包含人的姓名和年龄两个成员变量。编写程序,创建一个Person类型的结构体数组,包含3个人的信息,并输出每个人的姓名和年龄。

代码示例:

代码语言:c
复制
#include <stdio.h>
#include <string.h>

struct Person {          // Person是结构体名
    char name[20];
    int age;
};
struct Person person[3] = {         // person[3]是结构体数组
    {"喜羊羊", 22},     // 结构元素
    {"懒羊羊", 23},
    {"沸羊羊", 25}
};
int main() {
    // 定义一个结构体Person,包含人的姓名和年龄两个成员变量。编写程序,创建一个Person类型的结构体数组,包含3个人的信息,并输出每个人的姓名和年龄。
    for(int i = 0; i < 3; i++){
        printf("姓名:%s,年龄:%d\n", person[i].name, person[i].age);
    }
 return 0;
}

总结

通过本篇博客,我们了解了C语言中结构体的重要性以及如何运用它来组织和管理数据。结构体不仅是一种数据类型,更是程序设计中的重要工具,能够帮助我们处理各种复杂的数据结构,实现更加高效、清晰的代码。希望本文能够对读者在学习和使用C语言时有所帮助,也欢迎大家分享自己对结构体的理解和应用经验,共同探讨C语言编程的知识。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 概述
  • 结构体变量的定义和初始化
  • 结构体成员的使用
  • 结构体做函数参数
    • 结构体值传参
      • 结构体地址传递
        • 接下来我们来写一个小案例练习
          • 题目:定义一个结构体Person,包含人的姓名和年龄两个成员变量。编写程序,创建一个Person类型的结构体数组,包含3个人的信息,并输出每个人的姓名和年龄。
      • 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档