Linux C程序设计--结构体

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;
}



猜你喜欢

转载自blog.csdn.net/qq_41141741/article/details/79657597