服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - 详解C语言中结构体的使用

详解C语言中结构体的使用

2023-02-17 14:22从未止步.. C/C++

结构体是一些值的集合,这些值称为成员变量,结构体的每个成员可以是不同类型的变量。本文将通过示例为大家详细讲讲C语言中结构体的使用,需要的可以参考一下

结构体的声明

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

举例:

//定义结构体类型
struct tag//struct结构体关键字 tag结构体标签 struct tag结构体类型
{
    //成员变量
    char name[20];
    short age;
    char telphone[12];
    char sex[5];
}s1,s2,s3;//s1,s2,s3是三个全局结构体变量
int main()
{
    struct tag s;//s是局部变量
    return 0;
}

小tips:结构体类型是不占内存空间的,-相当于int在C语言中也是不占内存的,而int a(定义a变量后就会占据内存)

使用typedef定义一个单独的变量,因为我们在编写代码的过程中,重复的书写struct会感觉很繁琐,这样定义之后就可以直接使用改变量作为结构体类型。

举例:

typedef struct tag//定义tag为结构体别名,tag等价于struct tag
{
    char name[20];
    short age;
    char telphone[12];
    char sex[5];
}tag;//tag指的是类型,而不是变量
int main()
{
    struct tag s1;
    tag s2;//struct tag==tag,因此tag可以直接使用
    return 0;
}

结构体成员的类型

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

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

#include <stdio.h>
typedef struct tag
{
    //结构体成员类型的定义
    char name[20];
    short age;
    char telphone[12];
    char sex[5];
}tag;
int main()
{
    tag s1={"张三",20,"15372842487"};//结构体变量的初始化
    printf("%s的年龄是%d,手机号码为%s
", s1.name, s1.age, s1.telphone);//输出有关该成员的信息,通过结构体变量找对应的成员变量
    struct tag s2={"lisa",19,"8725111"};
    printf("%s的年龄是%d,手机号码为%s", s2.name, s2.age, s2.telphone);
    return 0;
}

结果

详解C语言中结构体的使用

结构体成员的访问

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

例如:

struct stu
{
    char name[20];
    int age;
}s1={"张三",19};
int main()
{
    printf("%s的年龄是%d", s1.name, s1.age);//s1.name和s1.age就是 通过点操作符访问结构体成员
}

输出:

张三的年龄是19

结构体传参数的时候,要传结构体的地址,其原因是函数传参的时候,参数是需要压栈的,如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,因此会导致性能下降。

举例:

typedef struct stu
{
    char name[20];
    int age;
}stu;
void print1(stu tmp)//传递结构体的值
{
    printf("name:%s
", tmp.name);
    printf("age:%d
", tmp.age);
}
void print2(stu* ps)//传递结构体的地址,开辟的空间为一个指针的大小(4/8个字节)
{
    printf("name:%s
", ps->name);
    printf("age:%d
", ps->age);
}
int main()
{
    stu s = { "张三",19 };
    print1(s);
    print2(&s);
    return 0;
}

输出:

name:张三
age:19
name:张三
age:19

这里插播一点数据结构的知识:数据结构分为线性数据结构(顺序表,链表,栈,队列)和树形数据结构(二叉树,图)。

顺序表:按照一定的顺序将元素储存起来。

举例:

详解C语言中结构体的使用

链表:用一条线将元素连接起来,不要求元素都在同一条线上。

举例:

详解C语言中结构体的使用

栈:元素先进后出,后进先出,元素的出入方式类似于手电筒中的电池一样,向一个不含任何元素的栈中放入一个元素的过程叫压栈,删除栈中的一个元素的过程,叫出栈,栈中元素的删除也是由栈顶乡下进行删除,因此如果想删除栈中元素,不能直接删除,必须将在该元素后面放入的元素都进行删除。

举例:

详解C语言中结构体的使用

实例分析:

int add(int x, int y)
{
    int z = 0;
    z = x + y;
    return z;
}
int main()
{
    int a = 10;
    int b = 20;
    int ret = 0;
    ret = add(a, b);
    printf("%d
",ret);
    return 0;
}

输出:

30

详解C语言中结构体的使用

函数在调用的时候,实参的传递顺序是从右到左,将a,b放入x,y的过程叫压栈。

到此这篇关于详解C语言中结构体的使用的文章就介绍到这了,更多相关C语言 结构体内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.csdn.net/m0_64365419/article/details/125548175

延伸 · 阅读

精彩推荐
  • C/C++C++利用容器查找重复列功能实现

    C++利用容器查找重复列功能实现

    本文将详细介绍c++容器简介,c++容器的比较 与操作实例,需要了解更多的朋友可以参考下...

    C++教程网1842020-11-12
  • C/C++C语言数组应用实现三子棋游戏

    C语言数组应用实现三子棋游戏

    这篇文章主要为大家详细介绍了C语言数组应用实现三子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    橘泽9972022-12-20
  • C/C++C语言实现字符串替换的示例代码

    C语言实现字符串替换的示例代码

    本文主要介绍了C语言实现字符串替换的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    bufanq12012022-08-14
  • C/C++C++中const的特性的使用

    C++中const的特性的使用

    这篇文章主要介绍了C++中const的特性的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着...

    怎因一双媚眼惹尘埃4802021-09-03
  • C/C++详解C++中如何将构造函数或析构函数的访问权限定为private

    详解C++中如何将构造函数或析构函数的访问权限定为private

    这篇文章主要介绍了详解C++中如何将构造函数或析构函数的访问权限定为private的方法,文中还解释了构造函数与虚函数的区别,需要的朋友可以参考下...

    YoferZhang5432021-03-27
  • C/C++C++函数重载、隐藏与覆盖重写的精通指南

    C++函数重载、隐藏与覆盖重写的精通指南

    这篇文章主要给大家介绍了关于C++函数重载、隐藏与覆盖重写的相关资料,这几个名词看着好像很像,不过其实一样都不一样,本文通过实例代码介绍的非常详...

    秃顶的码农9702022-09-06
  • C/C++Visual Studio Code 从简介、安装到配置所需插件详细介绍

    Visual Studio Code 从简介、安装到配置所需插件详细介绍

    这篇文章给大家介绍到vs与vs code的区别,并且会详细介绍vscode的安装步骤,和我所了解过的插件配置,感兴趣的朋友跟随小编一起看看吧...

    吴晓博10562021-08-30
  • C/C++C语言实现导航功能

    C语言实现导航功能

    这篇文章主要为大家详细介绍了C语言实现导航功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    徐徐大嫂6922022-10-26