IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 自定义类型(C语言) -> 正文阅读

[C++知识库]自定义类型(C语言)

结构体

结构体的声明

结构的基础知识

结构是一些值的集合,这些值为成员变量。结构的每个成员变量可以是不同的类型。

结构的声明

Struct tag //此处的tag为结构体的标签
{
    member-list;
}variable-list;

结构体的定义:

比如,定义一个书的结构,书是不是需要有?书名,书号,作者,价格。

struct Book
{
    char name[20];
    char  id[20];
    char  author[20];
    int price;
}sb1,sb2,sb3;//此处创建的为结构体的全局变量
//此处的sb1,sb2为struct Book类型的变量。
int main()
{
    struct Book sb4 ;//此处为局部变量。
    return 0;
}

匿名结构体类型

struct
{
    char c;
    int i;
    char arr[];
}sb1;
//此处的匿名结构体只能创建全局变量。

此处需要注意的是:

匿名结构体使用的时候只能使用一次,否则会出现下面的现象

struct 
{
    char name[20];
    char  id[20];
    char  author[20];
    int price;
}sb1,sb2,sb3;
struct {
    char name[20];
    char  id[20];
    char  author[20];
    int price;
}sb1,sb2,sb3;

虽然这两个匿名结构体看起来一样。

但是编译器认为上面的两个声明为不同的两个类型。

所以是非法的。

结构体的自引用

结构体自引用的方式:

struct Node
{
    int data;
   struct Node* n;
};

结构体类型的重命名

typedef struct Node
{
    int data;
    struct Node* next;
}Node;

//给typedef struct Node这个
类型重新起名字 Node



int main()
{
    Node n;
//此时可以省略struct。
    return 0;
}

但是重命名的时候,结构体里面自引用时这个struct不能省略,否则编译器不会运行通过。

结构体的定义和初始化

结构体是什么我们已经大概了解了,接下来我们需要知道结构体如何去初始化。

结构体创建的同时可以顺便创建变量,就是我们上面提到的创建结构体全局变量。

在我们创建结构体变量的同时也可以为其赋值

#include<stdio.h>
struct Book
{
    char name[20];
    char  id[20];
    char  author[20];
    int price;
}sb1 = { "《c语言结构体》","1345","zhangsan",15 };
//此时就可以为我们的结构体赋值
int main()
{
    struct Book sb4 = { "《c语言》","1385","lisi",45 };
    //我们也可以在创建局部变量时进行初始化。
    printf("%s %s %s %d\n", sb1.name, sb1.id, sb1.author, sb1.price);
    printf("%s %s %s %d", sb4.name, sb4.id, sb4.author, sb4.price);

}

?结构体嵌套

#include<stdio.h>
struct Book
{
    char name[20];
    char  id[20];
    char  author[20];
    int price;
};
struct Bookstore
{
    char Bookstore_name[20];
    char address[20];
    struct Book b;
}sb1 = { "好东西书店","南新街包子店对面 ","《c语言结构体》","1345","zhangsan",15 };


int main()
{
    struct Book sb4 = { "《c语言》","1385","lisi",45 };
    printf("%s %s %s %d\n", sb1.Bookstore_name ,sb1.address,sb1.b.name, sb1.b.id, sb1.b.author, sb1.b.price);
    printf("%s %s %s %d", sb4.name, sb4.id, sb4.author, sb4.price);

}

结构体的知识目前就在这里,过后还会有关于结构体内存对齐的方法。?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:08:17  更:2022-09-21 00:10:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 12:11:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码