union:共用體/聯(lián)合體
union 共用體名{
成員列表
};
類似結(jié)構(gòu)體,是一群變量的集合,和集合不同的是:
- 共用體分配空間時(shí),是依據(jù)內(nèi)部變量中最大變量的大小分配的。
如下,double最大,需要8byte,所以分配8字節(jié)空間
union data{
int n;
char ch;
double f;
};
- 實(shí)際上,共用體只分配空間,不管空間內(nèi)的任何操作
如下:根據(jù)共用體內(nèi)部變量分配好空間大小,甚至可以寫(xiě)入未定義的變量類型
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 :設(shè)置特殊屬性
attribute可以設(shè)置函數(shù)屬性(Function Attribute)、變量屬性(Variable Attribute)和類型屬性(Type Attribute)
union + attribute ((transparent_union)): 透明聯(lián)合
這里其實(shí)也可以是 attribute ((transparent_union)),說(shuō)是為了防止重名
透明聯(lián)合相關(guān)介紹:https://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Type-Attributes.html#Type-Attributes
##的作用:連接符
字符數(shù)組,字符指針
- 數(shù)組的變量名存放的值是數(shù)組第一個(gè)值的內(nèi)存地址,所以數(shù)組名就是一個(gè)指針
- 字符數(shù)組作用就是存放字符串的
- 字符指針
char*指向一串以00結(jié)尾的字符串 - 所以字符指針就是字符數(shù)組,即
char *==char []
//下面這樣的賦值是可行的
char a[2] = "a";
char *b = a;
printf("first value is :%s", b);