C语言结构体介绍


前言

C语言结构体的基础知识,结构体的声明,结构体成员的类型,结构体变量的定义和初始化,结构体变量定义,结构体变量初始化,结构体成员的访问,以及结构体传参。


一、结构的基础知识

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

二、结构的声明

结构体声明的内容如下:

struct tag
{
	member-list;// 成员列表
}variable-list; //注意分号不能丢
  • 说明
  • struct 是结构体的关键字
  • tag 是结构体标签,可以自己定义
  • member-list 是成员列表,可以是不同类型的成员变量。
  • variable-list 结构体变量,可以在创建类型的同时直接创建结构体变量。
struct Peo1
{
	char name[20];
	char sex[5];
	char tele[12];
	int age;
};

struct Peo2
{
	char name[20];
	char sex[5];
	char tele[12];
	int age;
}p1, p2;
// 这里的p1 和 p2是基于struct Peo2创建的结构体变量
// 并且结构体类型的声明在main函数外,所以是p1和p2全局变量
int main()
{
	return 0;
}

三、结构体成员的类型

  • 结构体成员可以是标量、数组、指针,甚至是其他结构体。
struct Peo
{
	char name[20];
	char sex[5];
	char tele[12];
	int age;
};

struct S
{
	struct Peo p; // 结构体变量 p 作为 struct S 的结构体成员
	int num;
	float pi;
};

int main()
{
	return 0;
}

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

1. 结构体变量的定义

    1. 可以直接在创建结构体类型的同时创建结构体变量。
    1. 可以使用 struct + 标签名 + 变量名 来创建全局或局部的结构体变量
// 结构的声明
struct Peo
{
	char name[20];
	char sex[5];
	char tele[12];
	int age;
}p1,p2; // p1 p2 是全局的结构体变量

struct Peo p3; // p3 也是全局的结构体变量

int main()
{
	struct Peo p4; // p4 局部的结构体变量
	return 0;
}
  • 说明
  • 结构体类型也可以在main函数中创建,创建位置不同,则作用域不同。
  • 一般情况下结构体类型都创建在全局。
  • 结构体变量的作用域取决于定义结构体变量的位置,如上 p1 p2 p3就是全局变量,p4是局部变量。

2. 结构体变量的初始化

  • 按照结构体成员变量的类型初始化即可。
  • 结构体类型可以不完全初始化。
// 结构的声明
struct Peo
{
	char name[20];
	char sex[5];
	char tele[12];
	int age;
};

struct S
{
	struct Peo p; // 结构体变量 p 作为 struct S 的结构体成员
	int num;
	float pi;
};

int main()
{
	struct Peo stu = {"张三", "男", "15588886666", 18};
	struct S class = { {"lisi", "女", "15588886666", 20}, 100, 3.1415f };
	return 0;
}
  • 结构体类型中包含结构体,只要按照加{},按照成员变量的顺序初始化即可

五、结构体成员的访问

  • 结构体成员有两种访问方式
    1. 结构体对象 + . + 成员变量
    1. 结构体指针 + -> + 成员变量
#include <stdio.h>
// 结构的声明
struct Peo
{
	char name[20];
	char sex[5];
	char tele[12];
	int age;
};

struct S
{
	struct Peo p; // 结构体变量 p 作为 struct S 的结构体成员
	int num;
	float pi;
};

void print1(struct Peo stu )
{
	printf("%s %s %s %f\n", stu.name, stu.sex, stu.tele, stu.age); // 通过结构体对象.成员变量访问
}

void print2(struct Peo* s)
{
	printf("%s %s %s %f\n", s->name, s->sex, s->tele, s->age); // 通过结构体指针->成员变量访问
}

int main()
{
	struct Peo stu = { "张三", "男", "15588886666", 18 };
	struct S class = { {"lisi", "女", "15588886666", 20}, 100, 3.1415f };

	printf("%s %s %s %d\n", stu.name, stu.sex, stu.tele, stu.age); 
	//张三 男 15588886666 18
	printf("%s %s %s %d %d %f\n", class.p.name, class.p.sex, class.p.tele, class.p.age, class.num, class.pi);
	//lisi 女 15588886666 20 100 3.141500

	print1(stu);
	print2(&stu);
	return 0;
}

六、结构体传参

  • 函数形参是实参的一份临时拷贝。所以若直接传递结构体对象,会降低性能。
  • 在结构体传参时,尽量采用结构体地址作为参数

总结

C语言结构体的基础知识,结构体的声明,结构体成员的类型,结构体变量的定义和初始化,结构体变量定义,结构体变量初始化,结构体成员的访问,以及结构体传参。

相关推荐

  1. C语言结构介绍

    2024-04-23 21:34:02       41 阅读
  2. c语言-结构

    2024-04-23 21:34:02       66 阅读
  3. 结构(C语言)

    2024-04-23 21:34:02       57 阅读
  4. C语言结构

    2024-04-23 21:34:02       50 阅读
  5. C语言----结构

    2024-04-23 21:34:02       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 21:34:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 21:34:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 21:34:02       87 阅读
  4. Python语言-面向对象

    2024-04-23 21:34:02       96 阅读

热门阅读

  1. 大厂面试:二叉搜索树如何获取其中第k小的结点

    2024-04-23 21:34:02       43 阅读
  2. 动态规划专练( 231.打家劫舍Ⅱ)

    2024-04-23 21:34:02       32 阅读
  3. DataFrame python 根据某个字段排序

    2024-04-23 21:34:02       37 阅读
  4. 重参数化(Reparameterization)的原理

    2024-04-23 21:34:02       44 阅读
  5. C#Lazy 实现延迟加载详解与示例

    2024-04-23 21:34:02       31 阅读