union:共用体/联合体
union 共用体名{
成员列表
};
类似结构体,是一群变量的集合
,和集合不同的是:
- 共用体分配空间时,是依据内部变量中最大变量的大小分配的。
如下,double最大,需要8byte,所以分配8字节空间
union data{
int n;
char ch;
double f;
};
- 实际上,共用体只分配空间,不管空间内的任何操作
如下:根据共用体内部变量分配好空间大小,甚至可以写入未定义的变量类型
union var1{
int a;
double b;
};
int main()
{
union var1 uu;
uu.a=1;
char* p1;
p1 = &uu;
p1[0] = 'a';
p1[1] = 'b';
p1[2] = '\0';
printf("%s", &uu);
return 0;
}
attribute :设置特殊属性
attribute可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)
union + attribute ((transparent_union)): 透明联合
这里其实也可以是 attribute ((transparent_union)),说是为了防止重名
透明联合相关介绍:https://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Type-Attributes.html#Type-Attributes
##的作用:连接符
字符数组,字符指针
- 数组的变量名存放的值是数组第一个值的内存地址,所以数组名就是一个指针
- 字符数组作用就是存放字符串的
- 字符指针
char*
指向一串以00结尾的字符串 - 所以字符指针就是字符数组,即
char *
==char []
//下面这样的赋值是可行的
char a[2] = "a";
char *b = a;
printf("first value is :%s", b);