前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入探索C语言中的结构体:定义、特性与应用

深入探索C语言中的结构体:定义、特性与应用

作者头像
大耳朵土土垚
发布2024-07-11 07:56:51
680
发布2024-07-11 07:56:51
举报
文章被收录于专栏:c/c++

结构体的介绍

在C语言中,结构体是一种用户自定义的数据类型,它允许开发者将不同类型的变量组合在一起,形成一个新的数据类型。结构体可以包含多个成员变量,每个成员可以是不同的数据类型,例如整型、字符型、浮点型等。

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

结构体定义

结构体的定义使用关键字struct,后面跟随结构体的名称。

例如描述一个人:

代码语言:javascript
复制
struct Person {
    char name[20];
    int age;
    float height;
};

上述代码定义了一个名为Person的结构体,它包含三个成员变量:name、age和height。name是一个字符型数组,有20个元素;age是一个整型变量;height是一个浮点型变量。

结构成员的类型

结构成员的类型可以是以下几种:

  1. 基本数据类型:包括整型(int)、浮点型(float)、字符型(char)、布尔型(bool)等。
  2. 枚举类型:表示一组具有离散值的变量。
  3. 结构体类型:用来定义多个不同类型的变量,形成一个新的数据类型。结构体中可以包含基本数据类型、枚举类型、数组、指针等。
  4. 指针类型:表示变量的地址。
  5. 数组类型:表示一组相同类型的变量。
  6. 函数类型:表示函数的参数和返回值类型。

这些类型可以在结构体中作为成员类型,用于定义结构体的成员变量。

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

结构体变量定义有两种方式,一种在声明时候直接定义,一种在使用时再定义:

代码语言:javascript
复制
struct Point
{
 int x;
 int y;
}p1; //声明类型的同时定义变量p1

//需要使用时
struct Point p2; //定义结构体变量p2

定义变量的同时初始化:

代码语言:javascript
复制
struct Point p3 = {1, 2};//定义结构体变量p3并赋值1和2

结构体嵌套初始化:

代码语言:javascript
复制
struct Node
{
 int data;
 struct Point p;
 struct Node* next; 
}n1 = {10, {4,5}, NULL}; //结构体嵌套初始化

struct Node n2 = {20, {5, 6}, NULL};//结构体嵌套初始化

结构体成员的访问

  1. 通过点操作符(.)访问结构变量的成员:

点操作符接受两个操作数。

例如:

代码语言:javascript
复制
struct Stu        //类型声明
{
 char name[15];//名字
 int age;      //年龄
};

struct Stu s = { "tutu",20};
printf("%s,%d", s.name, s.age);//使用.访问s中的成员
  1. 结构体指针访问指向变量的成员:
代码语言:javascript
复制
struct Stu        //类型声明
{
 char name[15];//名字
 int age;      //年龄
};

struct Stu s = { "tutu",20};
struct Stu* ps = &s;
printf("%s,%d", ps->name, ps->age);//使用->访问ps指向的结构体成员

结构体传参

结构体传参可以通过以下两种方式:

  1. 传值传参

将结构体的副本传递给函数。

代码语言:javascript
复制
//结构体传值传参
void print1(struct Stu s)
{
	printf("%d\n", s.age);
}
struct Stu s = { "tutu",20};
print1(s);
  1. 传地址传参

将结构体的指针传递给函数,以便在函数内部修改结构体的内容。

代码语言:javascript
复制
//结构体地址传参
void print2(struct S* ps)
{
 printf("%d\n", ps->num);
}
struct Stu s = { "tutu",20};
print2(&s);

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

这是因为函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。此外,传递结构体地址也便于我们修改结构体的内容。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结构体定义
  • 结构成员的类型
  • 结构体变量的定义和初始化
  • 结构体成员的访问
  • 结构体传参
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档