C语言结构体

#include <stdio.h>

//结构体格式
//struct student{
//    char name[100];
//    int age;//可以放入不同类型的变量
//};//注意这里必须要写分号

//struct point{
//    int year;
//    int month;
//    int day;
//}p1;//这些p1,p2,p3都是对象,类似于Java
//int main(){
//    struct point p2={.year=2014,.day=1};//未赋的值已经在结构体中被初始化成0了
//    p1=(struct point){2016,7,13};//这些是给结构体对象赋值的不同表示方式
//    struct point p3;
//    p3=p1;//把p1的内容赋值给p3,数组没有这种赋值操作
//    p3.year=2017;//额外的修改
//    struct point *p=&p3;//结构体类型的指针
//    printf("%i-%i-%i\n",p1.year,p1.month,p1.day);
//    printf("%i-%i-%i\n",p2.year,p2.month,p2.day);
//    printf("%i-%i-%i\n",p3.year,p3.month,p3.day);//%i指的是可以匹配各种进制的整数
//    printf("%i-%i-%i\n",p->year,p->month,p->day);//结构体指针的打印输出方式
//    printf("%p",p);//显示指针p的地址
//    return 0;
//}
//输出结果
//2016-7-13
//2014-0-1
//2017-7-13
//2017-7-13
//00000018903ffa64


//struct tun{
//    int a;
//    int b;
//};
//struct tun fun(void){
//    struct tun j;
//    scanf("%d%d",&j.a,&j.b);
//    printf("%d,%d\n",j.a,j.b);
//    return j;
//}
//void out(struct tun i){
//    printf("%d,%d\n",i.a,i.b);
//}
//int main(){
//    struct tun i={1,2};//先在这里给该结构体变量i赋值
//    i=fun();//在此结构体方法中,返回的是一个新值的结构体对象,把它的值给i,就完成了对结构体的重新赋值
//    out(i);//输出新的结构体对象的值
//}//正确的结构体的重新赋值
//输出结果
//2 6
//2,6
//2,6


//struct tun{
//    int a;
//    int b;
//};
//void fun(struct tun i){
//    scanf("%d",&i.a);
//    scanf("%d",&i.b);
//    printf("%d,%d\n",i.a,i.b);
//}
//void out(struct tun i){
//    printf("%d,%d\n",i.a,i.b);
//}
//int main(){
//    struct tun i={1,2};
//    fun(i);//这里对刚输入的新值进行输出
//    out(i);//这里还是旧值的输出
//}//错误的结构体重赋值(只不过是结构体的克隆体上赋值罢了)
//输出结果
//1 4
//1,4
//1,2


//struct run{
//    int a;
//    int b;
//};
//struct run* din(struct run *p);
//void vin(struct run r);
//void sprint(struct run *e);
//int main(){
//    struct run y={3,5};
//    din(&y);//这里先输入结构体对象的值并输出
//    vin(y);//这里靠着刚才输入的值来输出
//    vin(*din(&y));//这里再重新输入值,在din方法中输出后再在vin方法中输出
//    sprint(din(&y));//这里再重新输入值,在din方法中输出后再在sprint方法中输出
//    din(&y)->a=99;//这里对刚赋值并输出的结构体对象其中一个变量进行修改
//    vin(y);//然后再用vin方法输出
//    *din(&y)=(struct run){1000,20};//这里先在din方法中赋值并输出,因其返回值是指针,所以再给这结构体指针赋值
//    sprint(&y);//因为指针的带回功能使结构体变量y改变,所以这里输出的值也是被改变的值
//    //总结:din与他们同在
//}
//struct run* din(struct run *p){
//    scanf("%d",&p->a);
//    scanf("%d",&(*p).b);
//    printf("%d,%d\n",p->a,p->b);
//    return p;
//}
//void vin(struct run r){
//    printf("%d,%d\n",r.a,r.b);
//}
//void sprint(struct run *e){
//    printf("%d %d\n",e->a,e->b);
//}//加强版结构体重赋值
//输出结果
//1 4
//1,4
//1,4
//2 5
//2,5
//2,5
//3 6
//3,6
//3 6
//4 7
//4,7
//99,7
//5 8
//5,8
//1000 20


//struct ein{
//    int a;
//    int b;
//};
//int main(){
//    struct ein i[3]={{1,2},{3,4},{5,6}};
//    for (int j = 0; j < 3; ++j) {
//        printf("%i,%i\n",i[j].a,i[j].b);//这里每一个数组成员都是一个结构体对象
//    }
//}//结构体数组
//输出结果
//1,2
//3,4
//5,6


//struct tin{
//    int a;
//    int b;
//};
//struct din{
//    struct tin str1;//这个变量套一个小的结构体
//    struct tin str2;
//};//嵌套式结构体
//void sprint(struct din r);
//int main(){
//    struct din st[3]={{{1,2},{3,4}},
//            {{5,6},{7,8}},
//    {{9,10},{11,12}}};
//    for (int i = 0; i < 3; ++i) {
//        sprint(st[i]);//这里每一个数组成员都是一个大的结构体对象
//    }
//}
//void sprint(struct din r){
//    printf("%i,%i,%i,%i\n",r.str1.a,r.str1.b,r.str2.a,r.str2.b);//这里要详细定位到每一个变量
//}//嵌套式结构体数组
//输出结果
//1,2,3,4
//5,6,7,8
//9,10,11,12


//typedef struct fun{//typedef为自定义数据类型
//    int a;
//    char b[10];
//}str;
//int main(){
//    struct fun st1={1,"svc"};//这是原先的表达方式
//    str st2={2,"vcs"};//这里用str代替struct + 结构体名//更方便
//    printf("%d,%s\n",st1.a,st1.b);
//    printf("%d,%s\n",st2.a,st2.b);
//}
//输出结果
//1,svc
//2,vcs


//union是联合体,里面所有变量联合占据一个空间,在同一个变量下,
// 先把其中一个变量赋值后,其他变量想再赋值,那所有变量的值都会和这个后来赋的值一样
//union ein{
//    int a;
//    int b;
//}i,j;
//struct rin{
//    int c;
//    int d;
//}k;
//int main(){
//    i.a=1;
//    i.b=10;
//    j.b=2;
//    j.a=20;
//    printf("%d,%d\n",i.a,i.b);
//    printf("%d,%d\n",j.a,j.b);
//    k=(struct rin){1,2};
//    printf("%d,%d\n",k.c,k.d);
//}
//输出结果
//10,10
//20,20
//1,2



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值