1.结构体的声明与定义
结构体定义:
“结构”是一种构造类型,它有若干个“成员”组成。每一个成员可以是一个基本数据类型或者是一个构造类型。结构体既然是一种“构造”而成的数据类型,那么在说明和使用之前必须先定义它,也就是先构造它,如同在说明和调用函数之前先定义函数一样。
结构体声明:
struct 结构名
{成员列表};
对每一个成员也必须作类型说明:
类型说明符 成员名;
定义与访问结构体:(实在不知道哪里有错)
int _tmain(int argc, _TCHAR* argv[])
{
struct complex_struct{double x,y;}z;
double x=3.0;
z.x=x;
z.y=4.0;
printf("struct value:z.x=%d z.y=%d\n",z.x,z.y);
return 0;
}
注意:上例中变量x与变量z的成员x的名字并不冲突,因为变量z的成员x只能通过表达式z,x来访问,编译器可以从语法上区分哪一个x是变量x。哪一个是变量z的成员x。
如果结构体变量之间使用赋值运算符是允许的,用一个结构体变量初始化另一个结构体变量也是允许的。
例如:
struct complex_struct z1=(3.1,4.1);
struct complex_struct z2=z1;
z1=z2;
z2必须是局部变量才能用变量z1的值来初始化。既然结构体变量之间可以相互赋值和初始化,也就可以当作函数的参数和返回值来传递。
struct complex_struct add_complex(struct complex_struct z1, struct complex_struct z2)
{
z1.x=z1.x+z2.x;
z1.y=z1.y+z2.y;
return z1;
}
这个函数实现两个复数相加,如果在main函数中调用:
struct complex_struct z={3.1,4.1};
z=add_complex(z,z);
变量z在main函数的栈帧上,参数z1,z2在add_complex函数的栈帧上,z的值分别赋给z1,z2。z2的实部和虚部被累加到z1中然后return z1。
2.结构类型变量说明
说明结构变量的有三种方法:
1.先定义结构,在说明结构变量。
2.在定义结构类型的同时说明结构变量。
3.直接说明结构变量。
例1:
struct kk
{
int num;
char name[20];
char sex;
float score;
};
struct kk a,b;
例2:
struct kk
{
int num;
char name[20];
char sex;
float score;
}a,b;
例3:
struct
{
int num;
char name[20];
char sex;
float score;
}a,b;
3.结构变量赋值与使用
struct
{
int id;
char *name;
char *sex;
}boy1;
int _tmain(int argc, _TCHAR* argv[])
{
boy1.id=1001;
boy1.name="李四";
boy1.sex="男";
printf("%d %s %s",boy1.id,boy1.name,boy1.sex);
getchar();
return 0;
}
#include "stdafx.h"
struct Point
{
int x;
int y;
void tostring()
{
printf("%d",x+y);
}
};
struct lin
{
Point form;
Point to;
void print()
{
printf("%d",form.x*form.y);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
lin lin;
lin.form.x=10;
lin.form.y=10;
lin.to.x=20;
lin.to.y=20;
lin.form.tostring();
getchar();
return 0;
}