#include
#include
struct student //结构体
{
int num; //**** 四个字节
char name[10]; //**** **** **(**) 字节对齐 剩下的两个会补充两个 12个字节
double garde; //**** **** 八个字节
}stu3={3,"wangwu",88},stu4={4,"taoliu",82};
int main(int argc,char *argv[]){
struct student stu1,stu2 ={2,"lisi",83.5};
stu1.num =1;
#if 0 //条件编译 不编译
//stu1.name ="zhangsan"; error!
stu1.name[0]='z';
stu1.name[1]='h';
stu1.name[2]='a';
stu1.name[3]='n';
stu1.name[4]='g';
#endif
strcpy(stu1.name,"zhangsan");
stu1.garde =94.3;
printf("%d %s %f\n",stu1.num,stu1.name,stu1.garde);
printf("%d %s %f\n",stu2.num,stu2.name,stu2.garde);
printf("%d %s %f\n",stu3.num,stu3.name,stu3.garde);
printf("%d %s %f\n",stu4.num,stu4.name,stu4.garde);
printf("%ld %dl\n",sizeof(struct student),sizeof(stu1));
return 0;
}
使用方式:
1.先定义再使用(如stu1)
2.边定义边使用(如stu2)
3.定义结构体时赋值(如stu3,stu4,多个用逗号隔开)
4.以数组形式赋值(如 s[3] ,也可以在结构体后面直接赋值如 s1[2] )
#include
#include
struct student
{
int num;
char name[10];
double garde;
}s1[2]={{4,"lisi",89.5},{5,"wangwu",54}};
int main(int argc,char *argv[]){
struct student s[3]={{1,"zhaoyi",60},{2,"liuer",75.5},{3,"zhangsan",100}};
/*
可以一个一个赋值,也可以和上面一样一起赋值
struct student s[2];
s[0].num =1;
strcpy(s[0].name,"zhaoyi");
s[0].garde =60;
*/
int i;
for(i =0;i<3;i++){
printf("%d %s %f\n",s[i].num,s[i].name,s[i].garde);
}
for(i =0;i<2;i++){
printf("%d %s %f\n",s1[i].num,s1[i].name,s1[i].garde);
}
return 0;
}
#include
#include
struct student
{
int num;
char name[10];
double garde;
};
int main(int argc,char *argv[]){
struct student *p;
struct student stu1 ={2,"lisi",83.5};
p =&stu1;
printf("%d %s %f\n",stu1.num,stu1.name,stu1.garde);
printf("%d %s %f\n",(*p).num,(*p).name,(*p).garde);
printf("%d %s %f\n",p->num,p->name,p->garde);
return 0;
}
1. 通过原名来访问
2. 通过 (*p).num ... 来访问
3. 通过 p->num ...来访问 之后常用这个
在c语言中,不同数据类型的数据可以使用共同的存储区域,这种数据构造类型成为共同
体,简称共用,又称联合体
共用体在定义,说明和适用形式上与结构体相似,两者本质上的不同仅在于使用内存的
方式上
union 共用体名
{
成员表列;
};
#include
union gy
{
int a;
char b;
};
int main(int argc,char *argv[]){
union gy n;
n.a=0x12345678;
printf("%ld\n",sizeof(union gy)); // a,b成员共用的内存 只有四个字节
printf("%#x\n",n.a);
printf("%#x\n",n.b);
n.b ='b'; //如果b进行改变 那么a的值也会改变
printf("%#x\n",n.a);
printf("%#x\n",n.b);
return 0;
}
共用体中改变其中一个,另外的也会随之改变
共用体嵌套结构体
访问用n.f.c ...
在C语言中,允许使用关键字typedef定义新的数据类型
typedef <已有数据类型> <新数据类型>
如: typedef int INTEGER;
这里重新定义了数据类型INTEGER,其等价于int
INTEGER I; <==> int i;
1. 在main函数中定义 (如STU)
2. 直接在结构体上定义 (如STU1) ,如果直接重命名,结构体就可以不需要取名了
3. 定义指针访问(如 *STU_P)