//struct 是结构体关键字 stu是结构体类型名
//使用结构体类型 必须是 struct stu
//num name age 叫做结构体中的成员
//定义结构体类型的时候 不要给成员 赋值(重要)
//定义结构体类型的时候 并没有分配空间 所以 不能给成员赋值
struct stu
{
int num=10;//4B
char name[32];//32B
int age; //4B
};//一定要记得有;号
//结构体中的成员 拥有独立的空间(重要)
#include
struct stu
{
int num;//4B
char name[32];//32B
int age;//4B
};
void test01()
{
printf("sizeof(struct stu) =%d\n",sizeof(struct stu));//40B
return;
}
int main(int argc,char *argv[])
{
test01();
return 0;
}
void test01()
{
//就用结构体类型 定义一个变量
struct stu lucy;//lucy是局部变量 lucy的成员内容不确定
//通过结构体变量 访问 结构体中的成员 (一定要遵循成员自身的类型)
printf("num = %d\n", lucy.num);
printf("name = %s\n", lucy.name);
printf("age = %d\n", lucy.age);
//一定要遵循成员自身的类型
lucy.num = 100;
strcpy(lucy.name, "德玛西亚");
lucy.age = 18;
printf("num = %d\n", lucy.num);
printf("name = %s\n", lucy.name);
printf("age = %d\n", lucy.age);
return;
}
//结构体类型的定义
struct stu
{
int num;//4B
char name[32];//32B
int age;//4B
};
void test03()
{
//初始化的顺序 必须和 结构体成员的 顺序一致
struct stu lucy={100,"德玛西亚",18 };
printf("num=%d, name=%s, age=%d\n",lucy.num,lucy.name,lucy.age);
//清空结构体变量
memset(&lucy,0,sizeof(lucy));
}
void test04()
{
struct stu lucy;
memset(&lucy, 0,sizeof(lucy));
printf("请输入num name age:");
//&lucy.num 取的是num成员地址
scanf("%d %s %d",&lucy.num, lucy.name , &lucy.age);
printf("num=%d, name=%s, age=%d\n",lucy.num,lucy.name,lucy.age);
}
void test05()
{
struct stu lucy={100,"小法", 18};
struct stu bob;
//需求 将lucy的值 赋值 bob
//方式一:逐个成员赋值
//bob.num = lucy.num;
//strcpy(bob.name,lucy.name);
//bob.age = lucy.age;
//方法二:相同类型的结构体变量 可以直接赋值(推荐)
//bob = lucy;
//方法三:方法二的底层实现
memcpy(&bob,&lucy,sizeof(struct stu));
printf("num=%d, name=%s, age=%d\n",bob.num,bob.name,bob.age);
}
void test06()
{
struct stu arr[5]={
{100,"小法",18},
{101,"德玛西亚",19},
{102,"盲僧",20},
{103,"快乐风男",30},
{104,"提莫",8}
};
int n = sizeof(arr)/sizeof(arr[0]);
int i=0;
for(i=0;i<n;i++)
{
printf("num=%d, name=%s, age=%d\n",arr[i].num,arr[i].name,arr[i].age);
}
}
运行结果:
案例:定义一个结构体数组 获取键盘输入 求平均age
void test07()
{
struct stu arr[5];
int n = sizeof(arr)/sizeof(arr[0]);
int i=0;
int sum = 0;
memset(arr,0,sizeof(arr));//清空整个数组
printf("请输入%d个学生的信息\n", n);
for(i=0;i<n;i++)
{
scanf("%d %s %d", &arr[i].num, arr[i].name, &arr[i].age );
}
for(i=0;i<n;i++)
{
sum += arr[i].age;
}
printf("平均年龄为%d\n",sum/n);
}
void test09()
{
struct stu arr[5];
int i=0,j=0;
int n = sizeof(arr)/sizeof(arr[0]);
memset(arr,0,sizeof(arr));//整个数组 清0
//获取键盘输入
printf("请输入%d个学生信息\n",n);
for(i=0;i<n;i++)
{
scanf("%d %s %d",&arr[i].num, arr[i].name, &arr[i].age);
}
//根据学号 排序
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(arr[j].num < arr[j+1].num)//按照num的大小排序
{
struct stu tmp;
tmp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
//遍历
printf("---------------\n");
for(i=0;i<n;i++)
{
printf("%d %s %d\n",arr[i].num, arr[i].name,arr[i].age);
}
}