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语言浮游塔 第⑥期]结构体


前言

大家伙,这里是鸽子枫(doge),因为工作原因,距离上一期浮游塔的内容以及快过去两个月了。

本期的内容其实在七月就有雏形了,一直没找到时间。

现在,就让我们进入最后一期的内容,结构体吧!

Link Start!

目录

浮游塔第51层:结构体类型的定义

浮游塔第52层:结构体变量的定义

浮游塔第53层:结构体变量的初始化

浮游塔第54层:成员变量的访问

浮游塔第55层:用Typedef说明一种新类型

浮游塔第56层:结构体的应用

浮游塔第57层:结构体变量与结构体指针

浮游塔第58层:结构体数组与结构体指针

后记


浮游塔第51层:结构体类型的定义

结构体类型的引入

在生活当中,经常需要定义很多变量,那么如何同时定义多个不同类型的变量?

例如:如何同时定义一个人的姓名,年龄,性别的类型数据?

结构体的概念:

C语言中,可以自己构造出自己想要的数据类型,这种类型叫做复合数据类型

复合数据结构——结构体:是由一系列具有相同类型或不同类型的数据构成的组合型的数据结构。

结构体是一种可以由我们自己定义的数据类型。

如何定义结构体

定义语法

struct?结构体类型名
{
??成员说明列表
};


struct???student
{
??int ??num;
??char ?name[20];
??int???age;
??float??score;
??double?avg;
};

说明

①定义一个结构体类型,结构体的关键字——struct,结构体名为student

②这个结构体可以包含多个不同的基本数据类型

注意:

①结构体的类型可以多种,名字由关键字struct和结构体名组合而成

②访问成员的规则:

???(1)结构体普通变量通过“.”来访问成员,demo:Tom.num

???(2)结构体指针变量通过“->”来访问成员,demo:p->id

可以先定义结构体,再来定义结构体变量,也可以先定义结构体的同时定义变量。


浮游塔第52层:结构体变量的定义

结构体变量的定义

①先声明,后定义

struct?结构体名
{
     数据类型 成员变量名;
     数据类型 成员变量名;
     数据类型 成员变量名;
     ...;
};

语法: struct 结构体名 变量名;

#include<stdio.h>
struct student
{
	int num;
	int c_score;
	int PS_score;
	float avg;
};

int main(void)
{
	struct student Tom;//Tom为结构体变量
	Tom.num=10;
	Tom.c_score=90;
	Tom.PS_score=95;
	Tom.avg=92.5;
	printf("序号:%d\n",Tom.num);
	printf("C语言成绩:%d\n",Tom.c_score);
	printf("PS成绩:%d\n",Tom.PS_score);
	printf("平均分:%f\n",Tom.avg);
	return 0;
}

②在声明类型的同时,定义变量

struct?结构体名
{
    数据类型 成员变量名;
    数据类型 成员变量名;
    数据类型 成员变量名;
    ...;
}变量名列表;
struct?student
{
     int?num;
     int?c_score;
     int?PS_score;
     float?avg;
}Tom; ?//Tom是结构体变量

相当于struct student Tom;

③省略结构体名,直接定义结构体变量

struct
{
    数据类型 成员变量名;
    数据类型 成员变量名;
    数据类型 成员变量名;
    ...;
}变量名列表;
#include<stdio.h>
struct
{
	int num;
	int c_score;
	int PS_score;
	float avg;
}Tom={15,90,95,92.5};

int main( )
{
	printf("序号:%d\n",Tom.num);
	printf("C语言成绩:%d\n",Tom.c_score);
	printf("PS成绩:%d\n",Tom.PS_score);
	printf("平均分:%f\n",Tom.avg);
}

?注意:只能定义一次,接下来不能再定义结构体变量了


浮游塔第53层:结构体变量的初始化

语法:struct结构体名 变量名={初始化列表值};

#include<stdio.h>
struct student //student为结构体名
{
	int num;
	int c_score;
	int PS_score;
	float avg;
}; //定义结构体

int main( )
{
	struct student Tom={18,100,98,99.0};//Tom为结构体变量并初始化

}

浮游塔第54层:成员变量的访问

成员变量的访问:

结构体普通变量通过“.”来访问成员,demo:Tom.num

结构体指针变量通过“->”来访问成员,demo:p->id


浮游塔第55层:用Typedef说明一种新类型

typedef?struct?S

{ 
   int?g; 
   char?h; 
}T;

typedef用来给变量指定别名,S是结构体名称,T是该结构体的别名,不是变量名

可以同typedef将已存在的类型用一个新的名字来代表

用typedef定义新的类型名后,原有类型名仍有效。

用typedef可以为各种类型起别名,但不能为变量起别名。


浮游塔第56层:结构体的应用

使用结构体编写全班同学的C语言成绩,PS成绩。

#include<stdio.h>
//定义一个结构体
struct  student
{
	int c_score;
	int PS_score;
};

int main( )
{
	//定义了一个结构体变量,struct student 数据类型,Tom是变量名
	struct student Tom;
	Tom.c_score=98;  //给C语言成绩赋值
	Tom.PS_score=100; //给PS成绩赋值
	//打印,输出相应的内容。
	printf("C成绩:%d\n",Tom.c_score);
	printf("PS成绩:%d\n",Tom.PS_score);
	return 0;
}


浮游塔第57层:结构体变量与结构体指针

结构体指针的定义:

?所谓的结构体指针就是指向结构体变量的指针,一个结构体变量的起始地址就是这个结构体变量的指针。如果把一个结构体变量的起始地址存放再一个指针变量中,那么,这个指针变量就是指向该结构体变量。

demo:

??//pt 可以指向struct student 类型的变量或数组元素

struct ?student *pt;

结构体指针怎么访问结构体成员变量

??结构体指针->成员变量

??(*结构体指针).成员变量

结构体指针的使用:

demo:

#include <stdio.h>
#include<string.h>
typedef struct student
{
	char name[24];
	int age;
}STU;
int main(void)
{
	STU Tom;
	STU *p;  //结构体指针
	p=&Tom;
	//相当于(*p).age=18;
	//相当于Tom.age=18;
	p->age=18;
	strcpy(p->name,"sky");
}

使用结构体变量的指针变量输出学生的信息(包括学号,姓名,成绩)

#include <stdio.h>
#include<string.h>
//定义一个结构体,同时给结构体取一个别名“STU”
typedef struct student
{
	char name[24];
	long num;
	int score;
}STU;
int main(void)
{
	STU Tom;        //定义一个结构体变量Tom
	STU *p;         //定义一个结构体指针
	p=&Tom;         //结构体指针指向结构体变量的首地址
	p->num=18;      //给结构体成员变量赋值
	strcpy(p->name,"sky");
	p->score=100;
	printf("序号:%ld,",p->num);
	printf("姓名:%s,",p->name );
	printf("成绩:%d",p->score);
	return 0;
}


浮游塔第58层:结构体数组与结构体指针

  • 结构体数组的定义

①声明结构体的时候就定义结构体数组:

struct?结构体名

{

??成员列表

}数组名[数组长度];

demo

struct?student?
{
    int?num;
    int?c_score;
    int?ps_score;
    float?avg;
}class3[5]; ?

②先声明一个结构体类型,然后再用此类型定义结构体数组:

struct?结构体名

{

数据类型 成员变量名;

数据类型 成员变量名;

数据类型 成员变量名;

...;

}; ?

语法: struct?结构体名 数组名[数组长度]

demo

struct?student
{
    int?num;
    int?c_score;
    int?ps_score;
    float?avg;
}; ??//定义结构体

int?main( )
{
    struct?student?class3[5];

    return?0;
}

  • 结构体数组的初始化

结构体类型 数组名[数组长度]={初值列表}

?struct?Person?leader[3] = { "Li", 0, "Zhang", 0, "Sun", 0 };

?练习:有n个学生的信息(包括学号、姓名、成绩),找出成绩的最高的学生,并输出该学生的信息

#include<stdio.h>
#define?N?5
?struct?Student
?{
     ?int?num;
     ?char name[20];
     ?int?score;
?};

?int?main( )
?{
?????struct?Student?stu[N] = 
    { { 10101, "Zhang San", 88 }, 
      { 10102, "Li Si", 67 }, 
      { 10103, "Wang Er", 98 }, 
      { 10101, "Sun", 59 }, 
      { 10101, "Qian", 100 } };

?????int?i = 0;
?????int?max = 0;
?????for(i=1;i<N;i++)
?????{
????????if(stu[i].score > stu[max].score)
??        max = i;
?????}

?????printf("成绩最高的学生:\n");
?????printf("学号:%d\n",stu[max].num);
?????printf("姓名:%s\n",stu[max].name);
?????printf("成绩:%d\n",stu[max].score);

?????return?0;
}
  • ?指向结构体数组的指针

结构体指针怎么访问结构体数组成员变量?

(结构体指针+数组元素下标)->成员变量

结构体指针的定义方法:

#include<stdio.h>

typedef?struct?st
{
    char?name[24];
    int?age;
}STU;

int?main(void)
{
    STU?Tom[2]={{"张三",10},{"李四",20}};
    STU?*p; //结构体指针
    int?i=0;
    p=Tom; ?//数组元素的首地址

    for(;i<2;i++)
    {
        printf("姓名:%s,年龄:%d\n",(p+i)->name,(p+i)->age);
    }
}

后记

那么,到本期,C语言浮游塔的内容就基本告一段落了。

因为本专栏的受众原本就是初学者,故在一些内容上就不会那么的深入。

在接下来的时间里,我回去修改并完善本专栏的全部内容,尽量给大家整的幽默、简单、易懂一些。

谢谢大家三个月以来的观看!

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:38:18  更:2022-09-24 20:39:51 
 
开发: 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 11:42:55-

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