【C语言】入门——结构体

目录

结构体

为什么有结构体?

1.结构体的声明

1.2结构体变量的访问和初始化

2.结构体成员的访问


结构体

复制代码
struct 结构体类型
{
 //相关属性;
}结构体变量;

结构体和数组不同,同一类型的数据的集合是数组;

结构体是多种类型的数据的集合;

为什么有结构体?

在平常生活中,我们记录一个一个学生的信息,往往是每人一张信息卡,这里面记录了名字,身高等信息,这些不是简单的整型,数组就能解决的。像这种卡片形式的数据结构是通过结构体(struct)实现的。

1.结构体的声明

复制代码
struct Stu
{
    //定义学生相关属性
    char name[0];
    int age;
}s3,s4;
//s3,s4,是结构体类型Stu的变量名字
// s3,s4是全局变量

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

1.2结构体变量的访问和初始化

复制代码
struct str
{
 int x;
 int y;
}s1;                 //声明类型的同时定义变量s1
struct str s2;     //定义结构体变量s2

同样可以对其赋值,采用{}的形式

复制代码
struct str
{
	int age;
    char name[20];
};
struct str s1 = {18,"zhangsan"};


struct student
{
    int num;
    char name[10];
};
int main()
{
    struct student s1;
    struct student s2;
    return 0;
}

总结:

👍结构体类型定义的末尾必须有分号;

👍成员类型可以是除本身所属结构体类型外的任何已有数据类型;

👍在同一作用域内,结构体类型名不能与其他变量名或结构体类型名重名;

👍结构体类型的作用域与普通变量的作用域相同:在函数内定义,则仅在函数内部起作用;在函数外定义,则有全局作用;

2.结构体成员的访问

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

复制代码
struct student
{
	int age;
	char name[20];
	int score;
}stu1 = {20,"zhangsan",60};
 
int main()
{
	printf("%s %d", stu1.name, stu1.age);
	return 0;
}

有时候我们得到的不是一个结构体变量,而是一个结构体的指针

复制代码
struct Stu
{
 char name[20];
 int age;
};
void print(struct Stu* ps)
{
 printf("name = %s   age = %d\n", (*ps).name, (*ps).age);
        //使用结构体指针访问指向对象的成员
 printf("name = %s   age = %d\n", ps->name, ps->age);
}
int main()
{
    struct Stu s = {"zhangsan", 20};
    print(&s);            //结构体地址传参
    return 0;
}

总结:

函数传参的时候,形参是实参的一份拷贝,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的 下降。

结构体传参的时候,要传结构体的地址。

以上是简单的对C语言中结构体的介绍,不足之处还望指点。

相关推荐
笑衬人心。几秒前
Java 17 新特性笔记
java·开发语言·笔记
序属秋秋秋1 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
ruan1145142 小时前
MySQL4种隔离级别
java·开发语言·mysql
quant_19863 小时前
R语言如何接入实时行情接口
开发语言·经验分享·笔记·python·websocket·金融·r语言
lifallen6 小时前
Paimon LSM Tree Compaction 策略
java·大数据·数据结构·数据库·算法·lsm-tree
啟明起鸣6 小时前
【网络编程】简易的 p2p 模型,实现两台虚拟机之间的简单点对点通信,并以小见大观察 TCP 协议的具体运行
c语言·网络·tcp/ip·p2p
百锦再7 小时前
详细解析 .NET 依赖注入的三种生命周期模式
java·开发语言·.net·di·注入·模式·依赖
风吹落叶花飘荡7 小时前
2025 Next.js项目提前编译并在服务器
服务器·开发语言·javascript
失败又激情的man8 小时前
python之requests库解析
开发语言·爬虫·python
专注VB编程开发20年8 小时前
常见 HTTP 方法的成功状态码200,204,202,201
开发语言·网络协议·tcp/ip·http