学习C语言之了解结构体

结构体

1、结构体的基础知识

        1.1结构的基础知识

        结构体是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

演示如下:


struct Stu		//学生结构体
{
	char name[20];	//字符类型
	int  age;		//整型
	float height;	//浮点型
};

//结构体定义一般在主函数外,方便管理。
int main()
{
	struct Stu zhang = { "张三", 19, 177.6 };
	//一个学生包含姓名(字符),年龄(整形),身高(浮点型)。

	return 0;
}

一个结构体可以包含多种类型数据,如上例包含字符类型、整型、浮点型。

        

1.2结构的声明

        格式:

        struct tag

        {

                member - list;

        }variable - list;

演示如下:

	struct Stu			//声明包含结构体名 Stu
	{
		char name[20];	//声明包含结构体成员 姓名name
		int age;		//声明包含结构体成员 年龄 age
		float height;	//声明包含结构体成员 身高 height
	}zhang;				//声明包含结构体变量 zhang

int main()
{

	return 0;
}

       

 1.3结构成员的类型

        结构体的成员可以是标量、数组、指针、其他结构体。

演示如下:

struct score
{
	int Chinese;
	int Math;
	int English;
};

struct Stu
{
	char name[20];	//字符类型
	int*  age;		//整型
	float height;	//浮点型
	struct score;

};


int main()
{
	int a = 19;
	int* pa = &a;
	struct score g = { 90,90,90 };
	struct Stu zhang = { "张三",pa,177.5,g };

	return 0;
}

结构体 struct Stu 包含浮点型数、字符数组、整型指针、结构体struct score 。

        

1.4结构体变量的定义和初始化

        格式1:

        struct Point

        {

                int x;

                int y;

        }p1;

        格式2:

        struct Point p2;

演示如下:

struct Stu
{
	char name[20];
	int age;
	float height;
}zhang = { "张三", 19, 177.6 };
//此类定义方式,结构体变量是全局变量。

int main()
{
	struct Stu li = { "李四", 19, 188 };
	//此类定义方式,结构体变量是局部变量。

	return 0;
}

2、结构体成员的访问

        1)结构体变量访问成员

        结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。

        2)结构体指针访问指向变量的成员

演示如下:


struct score
{
	int Chinese;
	int Math;
	int English;
};

struct Stu
{
	char name[20];	//字符类型
	int  age;		//整型
	float height;	//浮点型
	struct score;

};


int main()
{
	struct Stu z = { "张三",19,177.5,{90,90,90} };
	struct Stu* pz = &z;

	printf("%s %d %f %d %d %d\n", z.name, z.age, z.height, z.Chinese, z.Math, z.English);
	//结构体变量访问结构体成员。
	//打印结果 张三 19 177.500000 90 90 90
	
	printf("%s %d %f %d %d %d\n", (*pz).name, (*pz).age, (*pz).height, (*pz).Chinese, (*pz).Math, (*pz).English);
	//指针解引用的结构体变量访问结构体成员。
	//打印结果 张三 19 177.500000 90 90 90

	printf("%s %d %f %d %d %d\n", pz->name, pz->age, pz->height, pz->Chinese, pz->Math, pz->English);
	//结构体指针访问结构体成员。
	//打印结果 张三 19 177.500000 90 90 90
	

	return 0;
}

上例中结构体指针解引用等同于结构体,所以可以用 (.)操作符访问。

        3、结构体传参

        通过地址传参可以节省内存空间。

演示如下:

struct Stu
{
	char name[20];	//字符类型
	int  age;		//整型
	float height;	//浮点型
};


void print1(struct Stu a)
{
	printf("%s %d %f\n", a.name, a.age, a.height);
}

void print2(struct Stu* a)
{
	printf("%s %d %f\n", a->name, a->age, a->height);
}


int main()
{
	struct Stu z = { "张三",19,177.5 };
	struct Stu* pz = &z;

	print1(z);	//打印结果 张三 19 177.500000 。

	print2(pz);	//打印结果 张三 19 177.500000
	//传址调用效率更高,占用空间更小。

	return 0;
}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值