C语言结构体struct详解

C语言结构体struct详解

什么是结构体?

在C语言中,结构体是一种用户自定义的数据类型,它可以将不同的数据类型组合在一起形成一个新的数据类型。结构体主要由结构体名、成员和符号构成。

使用结构体可以方便地定义一些复杂的数据类型,例如表示一个学生信息的数据类型,可以包括姓名、学号、性别、年龄等信息。

结构体的定义和声明

结构体的定义通常放在函数外部,以便在整个程序中使用。一个结构体的定义由"struct"关键字、结构体名、左花括号、结构体的成员、右花括号组成,语法格式如下:

struct 结构体名 {
    数据类型 成员1;
    数据类型 成员2;
    ...
    数据类型 成员n;
};

例如,下面是定义一个表示学生信息的结构体的示例:

struct student {
    char name[20];
    int id;
    char gender;
    int age;
};

定义结构体后,可以声明结构体变量,即为其分配内存空间,语法格式如下:

struct 结构体名 变量名;

例如,声明一个结构体变量s1表示一个学生的信息:

struct student s1;

结构体的初始化

结构体变量可以用以下两种方法进行初始化。

第一种方法:按顺序初始化

按照结构体定义的顺序对结构体变量进行初始化,语法格式如下:

struct student s1 = {"Tom", 1001, 'M', 18};

第二种方法:按成员名初始化

按照成员名对结构体变量进行初始化,语法格式如下:

struct student s1 = {.name = "Tom", .id = 1001, .gender = 'M', .age = 18};

结构体的访问

结构体变量的成员可以通过"."操作符进行访问,语法格式如下:

结构体变量名.成员名

例如,访问结构体变量s1的姓名:

printf("%s\n", s1.name);

结构体的嵌套

结构体也可以嵌套使用,将一个结构体作为另一个结构体的成员,语法格式如下:

struct A {
    int a;
    int b;
};

struct B {
    char c;
    struct A d;
};

例如,定义一个包含学生信息和成绩信息的结构体:

struct grade {
    struct student s;
    int math;
    int english;
};

struct grade g = {.s = {"Tom", 1001, 'M', 18}, .math = 90, .english = 80};

结构体的指针

结构体变量的地址可以用"&"操作符获取。结构体的指针指向结构体变量的首地址,语法格式如下:

struct 结构体名 *指针名 = &结构体变量名;

例如,定义一个指向结构体变量s1的指针ps1:

struct student *ps1 = &s1;

指针也可以用于访问结构体的成员,语法格式如下:

指针变量名->成员名

例如,访问s1的年龄:

printf("%d\n", ps1->age);

示例说明

示例一:结构体的定义和访问

#include <stdio.h>

struct student {
    char name[20];
    int id;
    char gender;
    int age;
};

int main() {
    struct student s1 = {"Tom", 1001, 'M', 18};
    printf("%s %d %c %d\n", s1.name, s1.id, s1.gender, s1.age);
    return 0;
}

输出结果为:

Tom 1001 M 18

示例二:结构体的嵌套和指针访问

#include <stdio.h>

struct student {
    char name[20];
    int id;
    char gender;
    int age;
};

struct grade {
    struct student s;
    int math;
    int english;
};

int main() {
    struct grade g = {.s = {"Tom", 1001, 'M', 18}, .math = 90, .english = 80};
    struct student *ps = &(g.s);
    printf("%s %d %c %d %d %d\n", ps->name, ps->id, ps->gender, ps->age, g.math, g.english);
    return 0;
}

输出结果为:

Tom 1001 M 18 90 80

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言结构体struct详解 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • Java 中很好用的数据结构(你绝对没用过)

    Java 中很好用的数据结构(你绝对没用过) 介绍 Java 中的数据结构有很多,比如数组、链表、栈、队列、堆、树等等。在这些常见的数据结构中,我们或多或少都会使用到。但是本篇文章要讲述的是一些比较冷门,但是很好用的数据结构。 双向队列(Deque) 双向队列,顾名思义,是一种可以双向操作的队列。它可以从队列的两端插入和删除元素,因此常被用作实现栈和队列以及…

    数据结构 2023年5月17日
    00
  • NTP时间同步服务器(频率同步)包含帧同步、载波同步、位同步

    NTP时间同步服务器(频率同步)包含帧同步、载波同步、位同步 NTP时间同步服务器(频率同步)包含帧同步、载波同步、位同步 京准电子科技官微——ahjzsz 同步的概念   同步技术是数字通信系统中非常重要的技术。一般来说数字通信系统要实现多种同步功能才能实现正确的数据通信任务。其技术目标是实现不同地域收发双方的同步通信互联,实现一致的信息数据交换,因此,通…

    算法与数据结构 2023年4月17日
    00
  • js实现无限层级树形数据结构(创新算法)

    要实现无限层级树形数据结构,可以使用递归算法来解决。以下是该过程的详细攻略: 步骤1:准备数据 为了演示无限层级树形结构,我们需要准备一组具有父子关系的数据。数据可以是任何格式,例如在子对象节点下添加一个名为children的数组即可。 例如,假设我们有以下数据: const data = [ { id: 1, name: "Node 1&quot…

    数据结构 2023年5月17日
    00
  • C语言数据结构之 折半查找实例详解

    C语言数据结构之 折半查找实例详解 什么是折半查找? 折半查找是一种在有序数组中查找某个特定元素的算法。其基本思想是将查找的值与数组的中间元素比较,如果比中间元素小,则在数组的左半部分查找;如果比中间元素大,则在数组的右半部分查找,直到找到该元素或查找范围为空。 折半查找算法的流程 确定要查找的数组arr和其元素个数n,以及要查找的元素value。 设定左边…

    数据结构 2023年5月17日
    00
  • 自学1

    Problem1 明明的随机数 ## 题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N 个 1 到 1000 之间的随机整数 (N <= 100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“…

    算法与数据结构 2023年4月24日
    00
  • C语言数据结构 栈的基础操作

    C语言数据结构 栈的基础操作 1. 栈的基本概念 栈(Stack)是一种基于LIFO(后进先出)原理的数据结构,类似于一组盘子,只能在盘子的顶部进行操作。每次从顶部添加或移除盘子。 栈具有两个基本操作:入栈(push)和出栈(pop)。当添加一个元素时,我们称其为“push”,当移除一个元素时,我们称其为“pop”。 2. 栈的实现 栈可以使用数组或链表来实…

    数据结构 2023年5月17日
    00
  • C语言数据结构实例讲解单链表的实现

    C语言数据结构实例讲解单链表的实现 单链表是一种线性的数据结构,它由一系列节点组成,每个节点都包含一个数据域和一个指向下一个节点的指针域。单链表常用于需要频繁插入删除元素的场景中。 单链表的数据结构设计 在C语言中,我们可以使用结构体来定义单链表的节点: typedef struct node { int data; // 数据域 struct node* …

    数据结构 2023年5月17日
    00
  • PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例

    下面我来为大家详细讲解一下“PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例”的攻略。 一、SplQueue 首先,我们先来介绍一下SplQueue。SplQueue是一个双向队列,它基于一个双向链表实现,可以在队列的两端插入和删除元素,既可以按照先进先出的顺序来操作队列,也可以反过来按照先进后出的顺序来操作…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部