2020-04-01 |

联合与结构

联合经常在结构中使用,因为结构可以有一个成员来跟踪哪个联合成员存储一个值。

例如,在以下程序中,车辆结构使用车辆识别号(VIN)或指定的id,但不能同时使用这两者:

typedef struct {
    char make[20];
    int model_year;
    int id_type; /* 0 为 id_num, 1 为 VIN */
    union {
        int id_num;
        char VIN[20]; 
    } id;
} vehicle;

vehicle car1;
strcpy(car1.make, "Ford");
car1.model_year = 2017;
car1.id_type = 0;
car1.id.id_num = 123098; 

请注意,联合声明在结构内部。执行此操作时,声明结尾处需要联合名称。

具有union标记的union可以在结构外部声明,但是有了这样的特定用途,结构内的union可以更容易地理解代码。

另请注意,点运算符用于访问结构成员的联合成员两次。

id_类型跟踪哪个联合成员存储值。以下语句显示car1数据,使用id_类型确定要读取哪个联合成员:

 /* 显示车辆数据 */
printf("品牌: %s\n", car1.make);
printf("车型年份: %d\n", car1.model_year);
if (car1.id_type == 0)
    printf("ID: %d\n", car1.id.id_num);
else
    printf("ID: %s\n", car1.id.VIN); 

联合也可以包含结构。

0

java教程
php教程
php+mysql教程
ThinkPHP教程
MySQL
C语言
css
javascript
Django教程

发表评论

    评价:
    验证码: 点击我更换图片
    最新评论