结构体
在编程语言中,最基本的、不可再分的数据类型称为基本类型。例如:整型、浮点型;根据语法规则由基本类型组合而成的类型称为复合类型。例如:字符串是由很多字符组成。
double型组成的结构体:
struct complex_struct
{
double x,y;
};
定义标识符complex_struct(遵循标识符的命名规则);是一个符合类型。同时还有另一种方式:
struct complex_struct
{
double x,y;
} z1,z2;
类型定义是一种声明,声明都是以“;”号结尾。
例子:定义和访问结构体:
#include <stdio.h>
main(){
struct complex_struct{double x,y;}z;
double x=3.0;
z.x=x;
z.y=4.0;
printf("struct value:z.x=%f z.y=%f\n",z.x,z.y);
}
结构体类型用在表达式中有很多限制,不想基本类型那么自由,例如:+、-、*、/等算术运算符和&&、 ||、!等逻辑运算符都不能作用于结构体类型,if语句、while语句中的控制表达式的值也不能是结构体类型。严格地说,可以做算术运算的类型称为算术类型,算术类型包括整型和浮点型,可以表示零和非零,可以参与逻辑与、或、非运算或者被控制。表达式的类型称为标量类型,标量类型包括算术类型和指针类型。
结构体变量之间使用赋值运算符是允许的,用一个结构体变量初始化另一个结构体变量也是允许的。例如:
struct complex_struct x1={3.0,4.01};
struct copmlex_struct z2=z1;
z1=z2;
既然结构体变量之间可以相互赋值和初始化,也就可以当作函数的参数和返回值来传递:
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;
}
结构体的三种方式:
第一种:
#include "stdafx.h"
struct Student
{
int num;
char * name;
};
int _tmain(int argc, _TCHAR* argv[])
{
struct Student stu;
stu.num=1001;
stu.name="赵五";
printf("%d,%s\n",stu.num,stu.name);
struct Student stu2;
stu2.num=1002;
stu2.name="钱六";
printf("%d,%s\n",stu2.num,stu2.name);
struct Student stu3;
stu3.num=1003;
stu3.name="孙七";
printf("%d,%s\n",stu3.num,stu3.name);
return 0;
}
第二种:
#include "stdafx.h"
struct Student
{
int num;
char * name;
}stu,stu2,stu3;
int _tmain(int argc, _TCHAR* argv[])
{
struct Student stu;
stu.num=1001;
stu.name="赵五";
printf("%d,%s\n",stu.num,stu.name);
struct Student stu2;
stu2.num=1002;
stu2.name="钱六";
printf("%d,%s\n",stu2.num,stu2.name);
struct Student stu3;
stu3.num=1003;
stu3.name="孙七";
printf("%d,%s\n",stu3.num,stu3.name);
return 0;
}
第三种:
#include "stdafx.h"
struct
{
int num;
char * name
}stu,stu2,stu3;
int _tmain(int argc, _TCHAR* argv[])
{
stu.num=1001;
stu.name="赵五";
printf("%d,%s\n",stu.num,stu.name);
stu2.num=1002;
stu2.name="钱六";
printf("%d,%s\n",stu2.num,stu2.name);
stu3.num=1003;
stu3.name="孙七";
printf("%d,%s\n",stu3.num,stu3.name);
return 0;
}
结构体定义的学号,名字的书写:
#include "stdafx.h"
struct Student
{
int num;
char * name;
void show()
{
printf("我叫:%s 学号是:%d\n",name,num);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
struct Student stu;
stu.num=1001;
stu.name="赵五";
stu.show();
struct Student stu2;
stu2.num=1002;
stu2.name="钱六";
stu2.show();
struct Student stu3;
stu3.num=1003;
stu3.name="孙七";
stu3.show();
return 0;
}
结构体定义的x,y轴的距离平方:
#include "stdafx.h"
struct Point
{
int x;
int y;
};
struct Line
{
struct Point ok;
struct Point res;
void show()
{
printf("距离的平方:%d\n",(ok.x-res.x)*(ok.x-res.x)+(ok.y-res.y)*(ok.y-res.y));
}
};
int _tmain(int argc, _TCHAR* argv[])
{
/*struct Point ok;
ok.x=10;
ok.y=10;
struct Point res;
res.x=20;
res.y=20;
struct Line line;
line.ok=ok;
line.res=res;
line.show();*/
struct Line line;
line.ok.x=10;
line.ok.y=10;
line.res.x=20;
line.res.y=20;
line.show();
return 0;
}