文章目录
前言
C++提供一些基本类型的数据类型,但是一般的数据类型已经不能满足应用的需要,这就需要构建一些复杂的数据类型,如数组、结构体类型、枚举类型、类类型(下一章节就会讲到,他其实和结构体一脉相承),这些统称为用户自定义类型(UDT),或者叫派生类型,我更喜欢叫构造类型。我觉得派生类型最有意思的是相互的组合,这也是派生类型和基础类型的区别,基础类型之间不能相互组合,但是派生类型可以,而且基础类型和派生类型之间还可以组合,如int (*p)(int, int), int *p,所以派生类型很复杂,一个类型有很多的形式。

一、结构体类型
1.为什么要用结构体
结构体和数组一样,都是一种特殊的数据结构,但是两者是不一样的,不然还有结构体数据类型什么事!!!!
数组中各个元素属于同一种数据类型;
结构体很丰富,各种数据结构在一起构成。
注意结构体的大小,涉及到内存对齐。
2.结构体的普通用法
①声明:struct 结构体类型名
{
类型名1 成员名1;//一个成员称为一个域(field)
类型名2 成员名2;//称为一个域(field)
类型名3 成员名3;//称为一个域(field)
//所有一起叫成员表,又称域表
};
C中成员只能是数据,C++中还可以有函数,但是因为有了类类型(和结构体一脉相承),所以C++中结构体延续C。
如何声明一种结构体的数据类型(注意是声明一种,不是定义一种),个人认为根据需要放在.h文件中供大家使用,如果有限制那就放在.c中供自己文件使用,实在不行就放在函数中,自己使用,这个时候就需要注意作用域的问题即可。
②结构体类型变量和初始化(建议采用a)的方式)
a)先声明后定义:注意c中struct 结构体类型名一起称为结构体类型名,C++中 结构体类型名就是 结构体类型名,所以定义不同;
b)声明的同时定义变量:
struct 结构体类型名
{
成员表
}变量名表;
c)直接定义结构体类型变量:
struct
{
成员表
}变量名表;
d)结构体类型变量初始化:在定义变量的时候初始化。
③引用结构体变量
a)可以将一个结构体变量整体赋值另一个结构体变量(和数组不同);
b)结构体变量明.成员名:.表示成员运算符;
c)可以引用结构体变量的地址,也可以引用结构体成员的地址(&)。
④结构体数组(类似于普通数组);
3.结构体的特殊用法1
①指向结构体变量的指针
a)通过指向结构体变量的指针引用结构体变量中的成员:
结构体变量.成员名
(*p).成员名
p->成员名(->指向运算符)
②用结构体变量和指向结构体变量的指针构成链表(静态链表和动态链表)
#include "stdafx.h"
#include <iostream>
using namespace std;
//声明结构体的类型
struct student{
//指向结构体的指针,如果是数组,必须定义数组的长度,具体参考结构体在内存中的模型,
//这个里面存的就是4个字节的地址值
char *name;
int score;
//指向student结构体的指针,这个里面存的就是4个字节的地址值
student *next;
};

本文详细介绍了C++中的结构体类型、枚举类型和typedef的用法。从结构体的声明、定义、初始化到特殊用法,包括位域结构体,以及共用体和枚举类型的应用。同时讲解了typedef的作用,用于为已有类型创建别名,方便代码管理和统一。
1345

被折叠的 条评论
为什么被折叠?



