Skip to content

服务器托管,北京服务器托管,服务器租用-价格及机房咨询

Menu
  • 首页
  • 关于我们
  • 新闻资讯
  • 数据中心
  • 服务器托管
  • 服务器租用
  • 机房租用
  • 支持中心
  • 解决方案
  • 联系我们
Menu

C语言—初识结构体 1、结构体的声明 2、结构体成员的访问 3、结构体传参

Posted on 2023年9月20日 by hackdl

1、结构体的声明

1.1、结构的基础知识

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

char、short、int、long、long、float、double是内置类型。

比如说,我们想要描述单一的成绩,身高我们直接用int类型就可以搞定了。

但是如果我想要描述人的特征,那这个就有点复杂,因为人包含:身高,性别,电话,名字等等信息。

书包含:书名,作者,定价,书号。

而针对此复杂对象的描述就需要用到结构体。

1.2、结构的声明

struct Peo
{
    char name[20];
    char tele[12];
    char sex[5];
    int high;
};

//或者下面的写法

struct Peo
{
    char name[20];
    char tele[12];
    char sex[5];
    int high;
}p1,p2;

//p1,p2是使用struct Peo结构体类型创建的2个变量/对象。
//并且p1,p2是全局变量。
//我们常说尽量不要创建全局变量,所以我们在使用struct Peo创建变量时,通常不这样创建。
//我们通常这样创建结构体变量(如下:)


int main()
{   
    struct Peo p1;   //结构体变量的创建
    return 0;
}	

1.3、结构成员类型

结构的成员可以是变量,数组,指针,甚至是其它结构体。

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

有了结构体类型,那如何定义变量,其实很简单。

struct Point
{
    int x;
    int y;
}p1;        //全局变量p1 
struct Point p2;      //全局变量p2

int main()
{
    struct Point p3;              //局部变量p3;
    return 0;
}

初始化结构体变量:

#include 

struct Peo
{
    char name[20];
    char tele[12];
    char sex[5];
    int high;
};

int main()
{   
    struct Peo p1 = {"张三","12345678912","男",180};
    return 0;
}	

那如果是嵌套结构体初始化呢?并且读取值呢?

如下代码:

#include 

struct Peo
{
    char name[20];
    char tele[12];
    char sex[5];
    int high;
};

struct St           //新的结构体
{
    struct Peo p;       //嵌套一个结构体变量
    int num;
    float f;
};


int main()
{   
    struct Peo p1 = {"张三","12345678912","男",180};
    struct St s = {{"里斯","98765432101","女",169},12,3.14f};    //嵌套结构体初始化。
    printf("%s %s %s %dn", p1.name, p1.tele, p1.sex, p1.high);
    printf("%s %s %s %d %d %fn", s.p.name,s.p.tele,s.p.sex,s.p.high ,s.num, s.f);
    return 0;
}	

输出:

2、结构体成员的访问

2.1、使用. 操作符来访问结构体成员

此结构是:结构体对象.结构体成员变量,eg:结构体对象.结构体成员变量,eg:(*ps).name

2.2、使用->操作符来访问结构体成员变量

此结构是:结构体指针->结构体成员,eg:ps->name

#include 

struct Peo
{
    char name[20];
    char tele[12];
    char sex[5];
    int high;
};

void print(struct Peo* sp)
{
    printf("%s %s %s %dn", sp->name, sp->tele, sp->sex, sp->high);
}

int main()
{   
    struct Peo p1 = {"张三","12345678912","男",180};
    print1(&p1);
    return 0;
}	

3、结构体传参

结构体传参有两种方式:

  • 传结构体对象本身,这样可以使用结构体对象.结构体成员变量的方法进行成员变量读取。
  • 传结构体对象的地址,这样可以使用结构体指针->结构体成员的方法进行成员变量读取。

我们想一想那个方法好呢?

是方法二:传结构体对象的地址好。具体原因:如果我们使用方法一:传结构体本身的话,前面说过,直接传结构体本身,形参知识实参的一份临时拷贝,如果大概这个结构体对象存储的数据非常之庞大时,拿在使用传结构体本身的话,优惠为形参拷贝一份如此庞大的数据,拿着空间和时间上会得不偿失。所以说使用方法二:传结构体对象的地址最好。

函数传参的时候,参数时需要压栈的。

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

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

直接上代码:

#include 

struct Peo
{
    char name[20];
    char tele[12];
    char sex[5];
    int high;
};

void print1(struct Peo* sp)    
{
    printf("%s %s %s %dn", sp->name, sp->tele, sp->sex, sp->high);
}

void print2(struct Peo pp)    //pp形参是p1实参的临时拷贝
{
    printf("%s %s %s %dn", pp.name, pp.tele, pp.sex, pp.high);
}


int main()
{
    struct Peo p1 = { "张三","12345678912","男",180 };
    print1(&p1);     //传入结构体地址
    print2(p1);     //传入结构体本身
    return 0;
}

输出:

服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net

Related posts:

  1. 轻松解决服务器托管的十大难题
  2. “高碑店云服务器托管服务概述” (Overview of GaoBeidian Cloud Server Hosting Services)
  3. 北京idc资质办理
  4. 满足企业需求的高效服务器托管——IDC机柜
  5. 保障服务器安全的托管服务SLA

服务器托管,北京服务器托管,服务器租用,机房机柜带宽租用

服务器托管

咨询:董先生

电话13051898268 QQ/微信93663045!

上一篇: leetcode 283 移动零 move-zeroes【ct】
下一篇: SetTimer(1,1000,ShowText2);

最新更新

  • 必看!S3File Sink Connector 使用文档
  • 如何评估大型语言模型(LLM)? 01 简介 Introduction 02 为什么急需一个全面的LLMs评估框架? 03 现有的LLMs评估框架有哪些? 04 现有评估框架存在的问题 05 在评估LLMs时应考虑哪些因素? 06
  • Vue.js 官方脚手架 create-vue 是怎么实现的?
  • 初学者友好的 CLI 及其基础知识指南
  • 如何快速在 Apache DolphinScheduler 新扩展一个任务插件?

随机推荐

  • 重庆移动机房托管
  • 游戏服务器租用费用查询:价格、配置详解
  • 语义分析的一些方法(二)
  • 今天开讲,6 大演讲主题、5 位技术大咖!龙蜥大讲
  • OSPF简介

客服咨询

  • 董先生
  • 微信/QQ:93663045
  • 电话:13051898268
  • 邮箱:dongli@hhisp.com
  • 地址:北京市石景山区重聚园甲18号2层

友情链接

  • 服务器托管
  • 机房租用托管
  • 服务器租用托管
©2023 服务器托管,北京服务器托管,服务器租用-价格及机房咨询 京ICP备13047091号-8