C语言全面梳理结构体知识点

yizhihongxing

C语言全面梳理结构体知识点

什么是结构体?

结构体是一种自定义的数据类型,它可以包含多个不同类型的成员变量,并且这些成员变量可以通过一个变量名来访问。结构体的定义需要使用关键字struct,并且需要指定结构体的类型名和成员变量。例如:

struct Person {
    char name[20];
    int age;
    float height;
};

以上代码就定义了一个名为Person的结构体类型,并且它包含了三个成员变量:nameageheight

如何使用结构体?

定义好了结构体之后,我们可以通过一个变量来实例化它,并且访问它的成员变量。例如:

struct Person tom;
strcpy(tom.name, "Tom");
tom.age = 18;
tom.height = 1.75;

以上代码就创建了一个名为tom的结构体变量,并且给它的成员变量赋予了初始值。

另外一个是通过指针来使用结构体,例如:

struct Person *pTom = &tom;
printf("%s is %d years old and %.2f meters tall.\n", pTom->name, pTom->age, pTom->height); 

以上代码中,我们首先创建了一个指向tom结构体的指针pTom,然后通过指针来访问结构体tom的成员变量。

结构体的高级用法

结构体不仅仅可以包含基本类型的成员变量,还可以包含指向其他结构体的指针、数组等复杂类型的成员变量,例如:

struct Node {
    int value;
    struct Node *next;
};

以上代码定义了一个包含值和指向下一个节点的指针的结构体。这种定义方式可以用于链表等数据结构的实现。

另外,为了方便结构体的使用,还可以定义结构体类型的别名,例如:

typedef struct {
    int x;
    int y;
} Point;

以上代码定义了一个名为Point的结构体类型,它具有xy两个成员变量。其中,typedef关键字用于给结构体类型定义别名。

结构体的大小

为了便于内存分配和优化,结构体的大小是需要考虑的。可以通过sizeof运算符来获取一个结构体所占用的字节数,例如:

printf("size of Person: %d bytes.\n", sizeof(struct Person));

以上代码可以输出Person结构体类型所占用的字节数,不同的结构体类型大小可能会有所不同。

示例说明

下面展示两个示例:

示例一

定义一个Student结构体类型,包含姓名、年龄、分数三个成员变量。实例化Student结构体,并输出实例的成员变量。

#include <stdio.h>

struct Student {
    char name[20];
    int age;
    float score;
};

int main() {
    struct Student stu = {"Tom", 18, 90.5};
    printf("name: %s, age: %d, score: %.2f\n", stu.name, stu.age, stu.score);
    return 0;
}

运行结果:

name: Tom, age: 18, score: 90.50

示例二

定义一个Rectangle结构体类型,包含左上角点和右下角点的坐标。实例化Rectangle结构体,并输出实例的成员变量。

#include <stdio.h>

struct Point {
    int x;
    int y;
};

struct Rectangle {
    struct Point topLeft;
    struct Point bottomRight;
};

int main() {
    struct Rectangle rect = {{10, 10}, {20, 20}};
    printf("topLeft: (%d, %d), bottomRight: (%d, %d)\n", rect.topLeft.x, rect.topLeft.y, rect.bottomRight.x, rect.bottomRight.y);
    return 0;
}

运行结果:

topLeft: (10, 10), bottomRight: (20, 20)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言全面梳理结构体知识点 - Python技术站

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

相关文章

  • c语言数据结构之并查集 总结

    C语言数据结构之并查集总结 简介 并查集,也称作不相交集合,是一种树型的数据结构。并查集用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。 并查集只有两个操作: find:确定某个元素属于哪个子集。它可以被用来确定两个元素是否属于同一子集。 union:将两个子集合并成同一个集合。 基本实现 以快速查找find和…

    数据结构 2023年5月17日
    00
  • Java concurrency集合之LinkedBlockingDeque_动力节点Java学院整理

    Java Concurrency集合之LinkedBlockingDeque_动力节点Java学院整理 LinkedBlockingDeque是什么? LinkedBlockingDeque是java.util.concurrent包下一个双向阻塞队列,用于在多线程的环境中处理元素序列,它支持在队列两端添加和移除元素。LinkedBlockingDeque可…

    数据结构 2023年5月17日
    00
  • java数据结构实现顺序表示例

    如果想要实现一种数据结构,我们首先需要考虑它的存储结构。对于顺序存储结构,Java中的数组是一个很好的选择。下面就为大家分享关于Java数据结构实现顺序表示例的完整攻略,帮助读者更好地理解该数据结构的实现方式。 1. 定义一个顺序表数组 首先,我们需要定义一个数组类型的顺序表。这个顺序表可以使用泛型来表示各种类型的数据: public class MyArr…

    数据结构 2023年5月17日
    00
  • C语言数据结构之单链表操作详解

    C语言数据结构之单链表操作详解 本文将详细讲解C语言数据结构中单链表的操作方法,包括单链表的建立、遍历、插入、删除等操作,并提供两个示例进行说明。 单链表的定义 单链表是一种常见的动态数据结构,由若干节点组成,每个节点通常包含一个数据元素和一个指向下一个节点的指针。单链表最后一个节点的指针指向NULL,表示链表的结尾。 单链表的节点定义 单链表的节点通常由结…

    数据结构 2023年5月17日
    00
  • MySQL索引原理详解

    MySQL索引原理详解 MySQL索引是一种数据结构,用于帮助查询语句更快地访问到所需的数据,提高数据库查询效率。本文将详细讲解MySQL索引的原理、类型及如何创建索引。 索引原理 B树 MySQL索引底层数据结构主要采用B树,B树是一种多路平衡查找树。B树的每一个节点可以存储多个键值,每个节点的子节点个数也可以大于2,从而使得查询效率更高。 索引分类 My…

    数据结构 2023年5月17日
    00
  • C语言 数据结构之链表实现代码

    下面就是关于C语言数据结构之链表实现代码的完整攻略。 什么是链表 链表是一种基础的数据结构,它是由一系列的节点所组成,每个节点会包含自己的数据和指向下一个节点的指针。 链表分为单向链表、双向链表和循环链表等多种类型,常见的是单向链表和双向链表。 链表的优点 相对于数组,链表具有下述优点: 链表的长度可以无限增长,不存在数组固定长度的问题; 插入和删除元素时,…

    数据结构 2023年5月17日
    00
  • Python中的函数式编程:不可变的数据结构

    Python是一门支持函数式编程的语言。相比于传统的命令式编程,函数式编程更加强调数据的不可变性。本文将介绍如何在Python中使用不可变的数据结构实现函数式编程。 什么是不可变的数据结构? 不可变数据结构是指一旦创建就无法改变的数据结构。在Python中,元组(tuple)是一个典型的不可变数据结构。以下是一个创建元组的示例代码: a_tuple = (1…

    数据结构 2023年5月17日
    00
  • C、C++线性表基本操作的详细介绍

    我来详细讲解“C、C++线性表基本操作的详细介绍”。 一、线性表的定义 线性表是一种数据结构,它是由n个数据元素组成的有限序列,记为(a1,a2,…,an),其中a1是线性表的第一个元素,an是线性表的最后一个元素。除第一个元素之外,每一个元素有且仅有一个直接前驱元素,除了最后一个元素之外,每一个元素有且仅有一个直接后继元素。 线性表可以理解为一个一维数…

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