结构体

结构名不是  起始位置的地址,而是结构的起始位置的数据。 
结构名作为实参是值传递,为了提高效率,函数形参可定义为(const struct  student * p) 


初始化 : 
方法一     struct student s;     strcpy(s.name,"Johnny");     s.age=22;
方法二       struct student s={ .name="Johnny" ,.age=22;}

结构体类似数组,元素顺序排列,类型可以不相同,因此  以结构中最大的元素所占的字节数对齐,如 int a【10】;不是以数组而是以int元素对齐。对齐的基本单位是二的倍数

char a; short b;  
char c; 
int d; 
short e;char f;   //占16字节 
  
   
   
  

对于结构嵌套,不是把被嵌套的结构当做一个整体,而是宏展开,按照原方法计算 
struct A{ 

 int a; 
 double b; 

}; 
struct B{ 

 struct A; 
 char c; 

};   // 24字节 


结构指针 
struct * p=&b; 
(*)p.属性   相当  于    p->属性      ;   b.属性


联合union是一个能在同一个存储空间存储不同类型数据的类型。 
联合体所占的内存长度等于其最长成员的长度,也有叫做共用体。 
联合体虽然可以有多个成员,但同一时间只能存放其中一种。
 union variant{ 
  int ivalue; 
  char cvalue; 
  double dvalue; 
 };

枚举类,定义一个取值(整型常量)可以列举的变量类型
 enum spectrum { red, yellow, green, blue, white, black }; 
 enum spectrum color; 
 color = black;
typedef enum {
red, yellow, green, blue, white, black
} Color;
 Color color =red;

typedef 原类型名 新类型名(主要用在复杂数据类型的表示上或者是便于一次性修改类型,比如返回值是一个函数指针)
typedef char BYTE;
typedef char* (*STRCAT)(char* s1,char* s2)//对函数指针定义新类型名STRCAT,
#define BYTE char
1.typedef仅限于对类型起别名,有些define表示不了的类型 
2.typedef是一条语句,解释由编译器,而不是预处理器执行,是不简单的宏替换,而是定义一种新的类型 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值