结构体类型

结构体是一种构造数据类型,把不同类型的数据整合在一起,每一个数据都称为该结构体类型的成员。

结构体(struct)数据类型可以把基本数据类型和派生类组合起来,以描述复杂的事物。结构类型也是派生类型。

基本数据类型都是单一的,只能表示一些简单的事物。

结构体类型定义

在程序设计中,使用结构体类型时,首先对结构体类型的组成进行描述,定义方式:

struct 结构体类型名称
{
      数据类型 成员1;
      数据类型 成员2;
      ...
      数据类型 成员n;
}

结构体变量的定义:为了能在程序中使用结构体类型的数据,应该定义结构体类型的变量,并在其中存放具体的数据。

struct [结构类型名] {成员声明列表} [变量名列名];

1、定义结构体类型,定义结构体变量;

struct coord
{
      int x;
      int y;
}  ;

2、在定义结构体类型的同时定义结构体变量;

struct coord
{
      int x;
      int y;
}  first , secord;

3、直接定义结构体变量(不建议)

struct 
{
      int x;
      int y;
}  first , secord;

结构体类型时用户自定义的一种数据类型,在编译时对结构体类型不分配空间,只有用它来定义某个变量时,才会为该结构体变量分配结构体类型所需大小的内存单元。

结构体变量的内存分配:结构体变量占据的内存大小是按照字节对齐的机制来分配的。通常情况下,字节对齐满足两个原则。

1、结构体的每个成员变量相当于结构体首地址的偏移量,是该成员变量的基本数据类型(不包括结构体、数组等)大小的整数倍,如果不够,编译器会在成员之间加上填充字节

2、结构体的总大小为结构体最宽基本类型成员大小的整数倍,如果不够,编译器会在最末一个成员之后加上填充字节

程序演示:

struct Sample
{
	short int n;
	char c[11];   
	float f;
	double b;
}s;

int main(void)
{
	printf("变量s所占字节数为:%d个字节\n",sizeof(s));  
	printf("结构成员   地址\n");
	printf("    n     %X\n",&s.n) ;
	printf("    c     %X\n", s.c) ;
	printf("    f     %X\n",&s.f) ;
	printf("    n     %X\n",&s.b) ;
	  
     return 0;
}

例题1:计算两点之间的距离

#include
#include
struct coord   //结构类型定义 
{
	int x;
	int y;
};

int main(void)
{
	struct coord first,second; //结构变量声明
	double distance;

	printf("请输入第一个点坐标:");
	scanf("%d %d",&first.x,&first.y); //点运算符访问结构成员

	printf("请输入第二个点坐标:"); 
	scanf("%d %d",&second.x,&second.y);

	int xDiff = first.x-first.x;      //横坐标的差 
	int yDiff = second.x-second.y;   //纵坐标的差 

	distance = sqrt(pow(xDiff,2)+pow(yDiff,2));
	printf("两点间距离是:%f\n",distance);

	return 0;
}

通过点运算符访问结构成员:结构变量实际上是结构中多个成员变量的组合。在C语言中,使用“.”运算符来引用结构体变量中的各个成员。

注意:通常结构体类型的定义放在主函数外。

你可能感兴趣的:(数据结构)