前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初识结构体

初识结构体

原创
作者头像
暮云
发布2023-03-15 11:41:42
1K0
发布2023-03-15 11:41:42
举报
文章被收录于专栏:C/C++语言学习

结构体的基础知识

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

结构的声明

代码语言:c++
复制
//描述一个人
//名字,年龄,性别,电话
//创建一个结构体,用于描述这个人
#include<stdio.h>
struct Man
{
    char name[20];//名字
    short age;//年龄
    char sex[5];//性别
    long ph;//电话 
}m1,m2,m3;//m1,m2,m3是三个全局的结构体变量(尽量不用这种全局变量)
int main()
{
    struct Man M1={"wy",19,"M",135};//M1为局部变量
    printf("%s\n",M1.name);
    printf("%d\n",M1.age);
    printf("%s\n",M1.sex);
    printf("%d\n",M1.ph);
    return 0;
}
代码语言:c++
复制
//另一种写法
#include<stdio.h>
typedef struct Man
{
    char name[20];
    short age;
    char sex[5];
    long ph;
}Man;//这种写法操作更加简便,直接用Man就可当作类型使用
//这里的Man是类型不是变量
int main()
{
    Man M1={"wy",19,"M",135};
    printf("%s\n",M1.name);
    printf("%d\n",M1.age);
    printf("%s\n",M1.sex);
    printf("%d\n",M1.ph);
    return 0;
}
代码语言:c++
复制
//嵌套结构体
#include<stdio.h>
typedef struct S
{
    int a;
    char c[10];
    char arr[20];
    double d;
}S;
typedef struct T
{
    char ch[10];
    S s;
    char* p;
}T;
int main()
{
    char arr[] = "handsome boy";
    T t = { "hollow",{520,"w","yz",13.14 }, arr};
    printf("%s\n", t.ch);// hollow
    printf("%d\n", t.s.a);// 520
    printf("%s\n", t.s.arr);// yz
    printf("%lf\n", t.s.d);// 13.14000
    printf("%s\n", t.p);// handsome boy
    return 0;
}

结构体成员的访问

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

代码语言:c++
复制
//法1:Print1. 结构体传参
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
typedef struct S
{
    char name[20];
    short age;
    char tele[12];
    char sex[5];
}S;
void Print1(S t)
{
    printf("name: %s\n",t.name);
    printf("age: %d\n",t.age);
    printf("tele: %s\n",t.tele);
    printf("sex: %s\n",t.sex);
}
int main()
{
    S s={"李三",25,"15568889888","男"};
    Print1(s);
    return 0;
}
/*name: 李三
  age: 25
  tele: 15568889888
  sex: 男*/
代码语言:c++
复制
//法2:Printf2 结构体地址传参
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
typedef struct S
{
    char name[20];
    short age;
    char tele[12];
    char sex[5];
}S;
void Print2(S *t)
{
    printf("name: %s\n",t->name);
    printf("age: %d\n",t->age);
    printf("tele: %s\n",t->tele);
    printf("sex: %s\n",t->sex);
}
int main()
{
    S s={"李三",25,"15568889888","男"};
    Print2(&s);
    return 0;
}
/*name: 李三
  age: 25
  tele: 15568889888
  sex: 男*/

相较于Print1,Print2更好,

原因:函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。(现阶段可理解为不需要开辟更多空间)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结构体的基础知识
    • 结构的声明
      • 结构体成员的访问
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档