codecamp

C 联合

学习C - C联合

共享内存

C可以通过a通过多个不同的变量共享相同的存储器区域联盟。

联合通常以与结构相同的方式给予标签名称。

您可以使用关键字union来定义联合。

例如,以下语句声明由三个变量共享的联合:

  
union U_example 
{ 
  float decval; 
  int *pnum; 
  double my_value; 
} u1; 

此语句声明具有标记名称U_example的联合,其在decval,pnum和my_value。

该语句还定义了具有变量名u1的联合的一个实例。

您可以使用如下语句声明此联合的其他实例:

union U_example u2, u3;

联盟成员的访问方式与结构成员的访问方式完全相同。

例如,要为u1和u2的成员分配值,可以写为:

u1.decval = 2.5; 
u2.decval = 3.5*u1.decval; 

联合的实例的大小是最大成员所需的内存。



例子


#include <stdio.h> 
      // ww w . ja va2s .  com
typedef union UDate UDate; 
typedef struct Date Date; 
typedef struct MixedDate MixedDate; 
typedef struct NumericDate NumericDate; 

void print_date(const Date* date);            // Prototype 

enum Date_Format{numeric, text, mixed};       // Date formats 

struct MixedDate { 
  char *day; 
  char *date; 
  int year; 
}; 
struct NumericDate { 
  int day; 
  int month; 
  int year; 
}; 
union UDate { 
  char *date_str; 
  MixedDate day_date; 
  NumericDate nDate; 
}; 
struct Date { 
  enum Date_Format format; 
  UDate date; 
}; 

int main(void) { 
  NumericDate yesterday = { 11, 11, 2020}; 
  MixedDate today = {"Monday", "12th November", 2020}; 
  char tomorrow[] = "Tues 13th Nov 2020"; 

  // Create Date object with a numeric date 
  UDate udate = {tomorrow}; 
  Date the_date; 
  the_date.date = udate; 
  the_date.format = text; 
  print_date(&the_date); 

  // Create Date object with a text date 
  the_date.date.nDate = yesterday; 
  the_date.format = numeric; 
  print_date(&the_date); 
      
  // Create Date object with a mixed date 
  the_date.date.day_date = today; 
  the_date.format = mixed; 
  print_date(&the_date); 
  
  return 0; 
} 

void print_date(const Date* date) { 
      switch(date->format) { 
        case numeric: 
          printf_s("The date is %d/%d/%d.\n", date->date.nDate.day, 
                                              date->date.nDate.month, 
                                              date->date.nDate.year); 
          break; 
        case text: 
         printf_s("The date is %s.\n", date->date.date_str); 
         break; 
        case mixed: 
         printf_s("The date is %s %s %d.\n", date->date.day_date.day, 
                                             date->date.day_date.date, 
                                             date->date.day_date.year); 
          break; 
        default: 
          printf_s("Invalid date format.\n"); 
      } 
} 

上面的代码生成以下结果。



C 结构体指针
C 文件
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

C 联合

C 预处理

C 索引

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }