结构体的学习

结构体类型声明

struct xuanmin

{                                                                                       char name[ 20 ];                                                       int tickets;

}   ;

int main()

{                                                                                          xuanmin t1[3] ={                                                              { "mdsz",21      }   ,                                                    {  "zzz",    23     }    ,                                                   {"zxcf",   34    }                                                      }       

           xuanmin t2 ;       

     t2.name= cfgx   ;

     t2.tickets=43     ;           

    printf ("%s的票数为%d",t2.name,t2.tickets) ;

  for(int i=0;i<3;i++){

 printf("%s票是%d",t1[ i].name,t2[i].tickets);                    

}     

 

 

 

 

结构体定义(基于typedef)

typedef struct

  char name[ 20];

  int tickets;

}T,*Tt;

T t1;

Tt t2;

typedef struct

{

  char name[ 20];

  int tickets;       

  union{ 

              int class;        

              char kemu;

             }mes;

}U;

结构体数组(结构体变量)的访问遍历

t1[  i  ].name

u1[ i ].mes.class

结构体数组指针(结构体指针)的访问遍历

T t1[ 3 ];         

T * p =t1;

 访问内容 p->name    p++

for(int i=0;i<3;i++){

printf("请输入第%d个成员的名字",i+1);

scanf("%s",p->name)  ;           

printf("请输入第%d个成员的成绩",i+1)   ;

scanf("%d",p->tickets)  ;     

p++;

}       

p=p-3;

@@@bbbbbbbbbbnnbbbb 同一个函数里调用同一个   指针要回到头部。

for(int i=0;i<3;i++){

printf("%s的分数是%d",p->name,p-tickets);

p++;

               

 

 

结构体下的二级指针

1.相当于传递是数值。在外函数中新开辟malloc内存1,把内存1的地址                            以函数返回值         方式,重新赋给p(p=NULL),以后操控的是外函数开辟的空间,不是main中的内存。

 T*  Initspace( T* p1    )

{

    p1 =(T *)mallco(4   * sizeof(T));

  for(int i=0;i<4;i++){

printf("请输入第%d个成员的名字",i+1);

scanf("%s",p1->name)  ;           

printf("请输入第%d个成员的成绩",i+1)   ;

scanf("%d",p1->tickets)  ;    

}

return p1;

}

 

int main()

{

    T* p =NULL;

   p=Initspace(p);  相当于传递的是数值类型

}

 

}

 

 

 

 

 

 

 

2.传递一级指针的地址,在外函数中操作main中对应内存

以后都是操作的是 堆里边的空间

int main()

{

    T* p =NULL;

  Initspace(&p);  相当于传递的一级指针的地址

}

Initspace(**p1)

{

   *p1 =(T *)malloc(4   * sizeof(T));

  for(int i=0;i<4;i++){

printf("请输入第%d个成员的名字",i+1);

scanf("%s",(*p1)  ->name)  ;           

printf("请输入第%d个成员的成绩",i+1)   ;

scanf("%d",(*p1)   ->tickets)  ;    

}

}

 

枚举Enum

typedef enum

{  mon=4,

 tus ,

  fri

}E;

E e1 =fri;

 

 

 

小知识点

1.scanf   T t1;  &t1

                T t2 [3]     t2

2.mark  外层赋mark=0;外层检测mark是否==0

3.feipiao  feipiao=0;

4.p=bak;用指针回到指针头部 

5.strcmp    if (   strcmp(p,tmpname)==0   )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值