当我们进行结构体传参时 优先用”传址“ 因为传参是 参数是需要压栈的,会有大量的空间和时间的开销
传址
#include<stdio.h>
struct S
{
int data[1000];
int num;
};
void print2(const struct S * ps)
{
printf("%d %d %d %d\n", ps->data[0], ps->data[1], ps->data[2], ps->num);
}
int main()
{
struct S sa= { {1,2,3}, 100 };
print2(&sa);
return 0;
}
位段
1.位段的成员必须是int,unsigned int 或signed int.但在c99之后,也可以是其他类型 但基本都是int,char
2.位段的成员名后面有一个冒号和一个数字。
”位段“的“位”是二进制位
struct a
{
int _a : 2;//a占2个bit位的空间
int _b : 5;//b占5个bit位的空间
};
所以位段可以设置结构体各各数据所占的空间可以节省很多空间
位段的空间是按照4个字节(int)或1个字节(char)的方式来开辟的(位段是不跨平台的)
枚举
enum SEX
{ //枚举的可能取值 取值时从上到下:0,1,2,3.......也可以自定义 只需要在列出枚举常量时后加=?就可以 例如male=5,枚举的值可以设定但使用时不能修改
male,
female,
secret
//以上三个都是枚举常量
};
一个枚举类型的变量所占内存大小是4