首页 > 代码库 > 8.1 结构体 共用体 typedef 枚举
8.1 结构体 共用体 typedef 枚举
typedef : 给类型起一个新的名字
int main()
{
unsigned int a = 10;
}
可以用下面表示:
typedef unsigned int u32_t;
int main()
{
u32_t a = 10;
}
与definde的区别:
typedef char * N;
#define N char*
N p1,p2,p3;
define的话 p2 p3 变成了char 类型
结构体 :不同类型元素的汇聚
①匿名结构体
}a,b; //注意这里不要忘记分号
只能在定义结构体的同时定义变量
struct c //错误
②有名结构体
struct STU{
int id;
char se;
}a;
struct STU b;//正确
③typedef别名结构体
struct STU{
int id;
char se;
};
typedef struct STU student;
student a,b;
结构体初始化赋值:
①struct STU a = {5 , ‘a‘};//初始化的时候赋值 要 一 一 对应
②定义之后只能一个一个赋值
struct STU b;
b={ 6 , ‘b‘ }; //错误,只能一个一个赋值 类似数组 不过结构体名字b不是一个指针
b.id = 6;
b.sex = ‘b‘;
③相同类型之间的结构体直接赋值 //数组直接不可以直接赋值,可以通过结构体
struct STU c;c=a;
如果里面有字符串,和数组
字符串要用 strcpy
结构体成员的引用:
.
struct STU a;
a.id = 10;
->
struct STU a,*p;
p = &a;
p->id = 10;
结构体的存储:
成员都是连续的,首成员在地址,后面成员在高地址,类似于堆的存储
最小整形变量对齐 4字节/2字节
struct STU{
int id; // 4
char se; // 4
};
siezof(struct STU) = 5;//错误 因为四字节对齐 等于8
结构体数组使用例子:
#include <stdio.h>
#define N 3
typedef struct STU{
int id;
char name[20];
char sex;
} student;
void init_student(student * p,int n)
{
int i;
char buf[1024];
for(i=0;i<n;i++)
{
printf("please int youre id:");
gets(buf);
p[i].id = atoi(buf);
printf("please int youre name:");
gets(p[i].name);
printf("please int youre sex:");
gets(buf);
p[i].sex = buf[0];
printf("\n");
}
}
void sort_student(student *p,int n)
{
int i,j,min;
student temp;
for(i=0;i<n;i++)
{
min = i;
for(j=i+1;j<n;j++)
if(strcmp(p[min].name, p[j].name) > 0)
min = j;
temp = p[min];
p[min] = p[i];
p[i] = temp;
}
}
void show_student(student *p,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%d\t%s\t%c\n",p[i].id,p[i].name,p[i].sex);
}
}
int main()
{
student a[N];
init_student(a,N);
sort_student(a,N);
show_student(a,N);
return 0;
}
共用体 【联合体】: union
union ITEM{
int id;
char sex;
short n;
}
union ITEM a;
sizeof(a) //4 公用体如果存id就不能存其他的,如果存sex,就不能存其他的。
a.id = 100;
a.sex = ‘m‘;
a.n = 20;
后面的覆盖掉前面的
struct something
{
float price;
union item{
char addr[100]; //要么有地址,要么有日期
char date[50]; //要么柴油,要么汽油
};
};
枚举: enum
enum POKE
{
spade , heart , diamond , club
//0 1 2 3
};
enum POKE a = club;
printf("%d" , a); //3
来自为知笔记(Wiz)
8.1 结构体 共用体 typedef 枚举
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。