结构体/枚举/共用体

1、结构体

结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合。
1.1、结构体定义:

struct stuMan
{
    char szName[16];
    int  nAge;
};

stuMan结构体包含了两个数据,一个是名字szName,一个是年龄nAge。

1.2、结构体声明
C语言中结构体声明必须带上struct关键字,例如:

struct stuMan manC;

而C++中不需要:

stuMan manCPlus;

1.3、结构体初始化
声明的结构体不进行初始化,结构体中的值都是随机值,可能引起问题。初始化方法:

struct stuMan man = {"xiaoming",30};

或者直接用struct stuMan man = {0};初始化为空值。

1.4、结构体使用
取值方式:
man.szName;就可以取到字符串”xiaoming”。
man.nAge;就可以取到30。

赋值方式:
man.nAge = 10;
另外,结构体还可以直接赋值为另一个结构体:

struct stuMan man = {"xiaoming",30};
struct stuMan manOther = {0};
manOther = man;

这种情况,只是进行了浅拷贝,对含有指针的结构体需要慎用,因为当其中一个结构体释放了指针之后,可能会引起指针非法访问。

1.5、C++结构体
C++结构体有很多C语言里没有的用法,比如上文提到的声明方式。
另外,C++的结构体还能拥有成员函数,相当于拥有了类的一些特性。比较常用的构造函数:

struct stuManPlus
{
    char szName[16];
    int  nAge;

    stuManPlus()
    {
        memset(szName, 0, sizeof(szName));
        nAge = 0;
    }
};

同样,也能够定义符号的重载函数等。另外,C++的结构体和类一样,含有this指针。

2、枚举

枚举,是一个被命名的整型常数的集合。例如:

enum day
{
    MONDAY=1, 
    TUESDAY,
    WECONDAY,
    THUSDAY,
    FRIDAY,
    SATADAY,
    SUNDAY
};

定义枚举后,MONDAY就代表整数1,TUESDAY代表整数2,以此类推。枚举值可以在定义时赋值,也可以不赋值,不赋值的情况下以前一个枚举值+1为当前值,如果是第一个枚举不赋值则为0。

3、共用体

几个不同的变量共同占用一段内存的结构,被称作“共用体”类型结构,简称共用体或联合体。例如:

union data
{
    char cData;
    int nData;
    float fData;
};

使用共用体的目的是希望同一内存段存放几种不同类型的数据,因此一个共用体的内存大小和共用体中所有类型中占用内存最大的类型是一致的。比如data共用体,所占的内存大小和int以及float一致为4Bytes。
只能对共用体中的成员进行引用或者赋值,不能直接对共用体变量进行引用或者赋值。

data aData;
aData.cData = 'a';
printf("%d", aData.nData);

因为使用的是同一段内存,所以在对其中一个成员进行赋值后,其他成员的值也会变化。
最后说一下,现在这个共用体好像用的比较少。

猜你喜欢

转载自blog.csdn.net/wizardtoh/article/details/53837018