#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
C语言结构体
于 2023-12-22 17:02:14 首次发布