结构体的使用(以c语言为例)
定义与基本格式
结构体是一种构造数据类型!
用途:把不同类型的数据组合成一个整体-------自定义数据类型
基本格式:
struct 【结构体名】
{
类型标识符 成员名;
类型标识符 成员名;
……
};
一些用法
定义结构体类型的同时定义结构体变量
如下图所例:
struct student
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu1,stu2;
注意:也可像下图这样定义无名结构体定义变量,但只可一次!
struct
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}变量名表列;
结构体变量的引用与初始化
PS:结构体变量不能整体引用,只能引用变量成员
初始化:
方法1:
struct 结构体名
{
类型标识符 成员名;
类型标识符 成员名;
…………….
};
struct 结构体名 结构体变量={初始数据};
方法二:
struct 结构体名
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}结构体变量={初始数据};
方法三:
struct
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}结构体变量={初始数据};
(结构体数组其实和结构体常规定义&初始化相似,基本类比就可以了)
就是一点哈:全部初始化时维数可省
比如下面stu【】中括号里的数组维数就可以省略
struct student
{ int num;
char name[20];
char sex;
int age;
};
struct student stu[ ]={{100,“Wang Lin”,‘M’,20},
{101,“Li Gang”,‘M’,19},
{110,“Liu Yan”,‘F’,19}};
结构体与指针
这个必须是精髓!!!!
定义
struct 结构体名 *结构体指针名
eg:struct student *p
PS:使用结构体变量引用成员格式——
1、(*结构体指针名).成员名
2、结构体指针名->成员名
3、结构体变量名.成员名
小小例子:
struct student stu1;
struct student *p=&stu1;
stu1.num=101; 等价于 (*p).num=101
下面举两个代码例子:
struct data
{ int a, b, c; };
void func(struct data parm);
int main()
{ struct data arg;
arg.a=27; arg.b=3; arg.c=arg.a+arg.b;
printf("arg.a=%d arg.b=%d arg.c=%d\n",arg.a,arg.b,arg.c);
printf("Call Func()....\n");
func(arg);
printf("arg.a=%d arg.b=%d arg.c=%d\n",arg.a,arg.b,arg.c);
return 0;
}
void func(struct data parm)
{ printf("parm.a=%d parm.b=%d parm.c=%d\n",parm.a,parm.b,parm.c);
printf("Process...\n");
parm.a=18; parm.b=5; parm.c=parm.a*parm.b;
printf("parm.a=%d parm.b=%d parm.c=%d\n",parm.a,parm.b,parm.c);
printf("Return...\n");
}
//这个并没有修改值
struct data
{ int a, b, c; };
void func(struct data *parm);
int main()
{struct data arg;
arg.a=27; arg.b=3; arg.c=arg.a+arg.b;
printf("arg.a=%d arg.b=%d arg.c=%d\n",arg.a,arg.b,arg.c);
printf("Call Func()....\n");
func(&arg);
printf("arg.a=%d arg.b=%d arg.c=%d\n",arg.a,arg.b,arg.c);
return 0;
}
void func(struct data *parm)
{ printf("parm->a=%d parm->b=%d parm->c=%d\n",parm->a,parm->b,parm->c);
printf("Process...\n");
parm->a=18; parm->b=5; parm->c=parm->a*parm->b;
printf("parm->a=%d parm->b=%d parm->c=%d\n",parm->a,parm->b,parm->c);
printf("Return...\n");
}
//这个成功修改了值
具体需要自己理解,我觉得自己看明白是最好的!
——————我是分界线————————
最后说说用typedef定义类型
顾名思义:用自定义名字为已有数据类型命名
格式:typedef type name;
注意,它不创造新类型,不可定义变量,可以嵌套,与define不同~
定义四步走:
按定义变量方法先写出定义体 如 int i;
将变量名换成新类型名 如 int INTEGER;
最前面加typedef 如 typedef int INTEGER;
用新类型名定义变量 如 INTEGER i,j;