struct,typedef struct结构体
一.struct 结构体框架 :
struct 类型名
{
};
例:struct Student
{
char name[20];
int age;
};
结构体自定义数据类型,定义完成后等同于内置类型。
1.结构体不能定义一个自身的普通成员,但可以定义一个指向自身的指针。
例:
struct Student
{
char name[20];
int age;
};
struct A
{
struct Student e; //ok
struct B f; //error B未定义
struct A g; //error,因为无法确定g的大小,不能给它分配内存空间
struct A *p; //ok
};
2.结构体普通变量通过"."号访问它的成员,而结构体指针通过"->"号访问它的成员。
struct Student
{
char name[20];
int age;
};
struct Student stu1;//stu1的name和age为随机值
struct Student stu2={"zhang"};//name=zhang,age=0 因为stu2为聚合类型
struct Student stu3={"li",25};
若要将stu3的age变为30 进行操作 stu3.age=30;
若要将stu3的name变为"wang" 进行操作strcpy(stu3.name,"wang");
struct Student *pstu=&stu2;
若要将stu2的age变为35 进行操作pstu->age=35//也可以(*pstu).age=35;一般用"->"
若要将stu2的name变为"sun" 进行操作strcpy(pstu->name,"sun");//也可以strcpy((*pstu).name,"sun");一般用"->"
例:
#include <stdio.h>
#include<string.h>
struct Student
{
char name[20];
int age;
};
void show(struct Student *s)
{
printf("name:%s\nage:%d\n\n",s->name,s->age);
}
int main()
{
struct Student stu1;//stu1的name和age为随机值
struct Student stu2={"zhang"};//name=zhang,age=0 因为stu2为聚合类型
struct Student stu3={"li",25};
printf("stu1:\n");
show(&stu1);
printf("stu2:\n");
show(&stu2);
printf("stu3:\n");
show(&stu3);
//若要将stu3的age变为30 进行操作 stu3.age=30;
//若要将stu3的name变为"wang" 进行操作strcpy(stu3.name,"wang");
stu3.age=30;
strcpy(stu3.name,"wang");
printf("修改后的stu3:\n");
show(&stu3);
struct Student *pstu=&stu2;
//若要将stu2的age变为35
// 进行操作pstu->age=35也可以(*pstu).age=35;
//若要将stu2的name变为"sun"
//进行操作strcpy(stu2->name,"sun");也可以strcpy((*pstu).name,"sun");
pstu->age=35;
strcpy(pstu->name,"sun");
printf("修改后的stu2:\n");
show(&stu2);
return 0;
}
结果:
二.typedef
typedef 数据类型 新数据类型 //它用于类型定义,就相当于给一个类型起一个新名称
typedef unsigned long long int unit64; //给unsigned long long int 起新名称为unit64
unit64 a; //变量a的类型unsigned long long int
区分:
typedef int * Pint;
#define PINT int *
Pint i,j; //i,j的类型都为int *
PINT x,y; //x的类型为int * ,y的类型为int
typedef int Arr[10];
Arr a; //定义一个长度为10的int 数组,数组名为a
例:
typedef int Arr[10];
int main()
{
Arr a;
printf("%d\n",sizeof(a));
return 0;
}
结果:
typedef int (*pfun)(int ,int);
pfun p; //变量p为一个返回值int,函数形参为两个int的函数指针
例:
int Max(int a,int b)
{
return a>b?a:b;
}
typedef int (*pfun)(int,int);
int main()
{
pfun p=Max;
printf("%d\n",p(2,6));
return 0;
}
结果:
用typedef 简略结构体名称
例:struct Student
{
char name[20];
int age;
};
定义结构体变量时要加上struct 比较麻烦
为了简略用typedef 给struct Student起新名称为Student
typedef struct Student Student;
此时定义结构体变量时为 Student e;
例:
struct Student
{
char name[20];
int age;
};
typedef struct Student Student;
int main()
{
Student e={"wang",23};
printf("name:%s\nage:%d\n",e.name,e.age);
return 0;
}
结果:
在C++中通常使用
typedef struct Student
{
char name[20];
int age;
}Student; //Student为给struct Student起的新名称
例:
typedef struct Student
{
char name[20];
int age;
}Student;
int main()
{
Student e={"wang",23};
printf("name:%s\nage:%d\n",e.name,e.age);
return 0;
}
结果:
上一篇: 编译原理实验一 模拟DFA
下一篇: Android MVP