结构体类型声明
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 )