首页 > 其他分享 >C语言入门学习 --- 7.结构体

C语言入门学习 --- 7.结构体

时间:2024-03-13 13:30:30浏览次数:28  
标签:char struct 入门 C语言 --- Stu pa 结构

文章目录

第七章结构体

1.结构体类型的声明

2.结构体初始化

3.结构体成员访问

4.结构体传参

1.结构体的声明

1.1结构的基础知识

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

1.2结构的声明
typedef struct Stu
{
    char name[20];
    char sex[8];
    int age;
    char id[10];
}Stu;
1.3结构成员的类型

类型可以是标量、数组、指针,甚至是其他结构体。

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

如何定义和初始化变量:

struct Stu
{
    char name[20];  //局部变量
    char sex[5];
    int age;
    char id[10];
}s;                    //全局变量

struct Stu s1;      //定义结构体变量s1
struct Stu s2 = { "小明","男","20","aw11140551" }; //初始化

struct Point
{
    int x;
    int y;
};

struct Node
{
    int data;
    struct Point p;
    struct Node* nx;
}n1 = { 1,{6,7}, NULL};  //结构体嵌套初始化

struct Node n2 = { 2,{9,10},NULL };  //结构体嵌套初始化

2.结构体成员的访问

2.1结构体变量访问成员

通过点操作符(.)访问的。点操作符接受两个操作数。

#include <stdio.h>

struct Stu
{
    char name[20];  
    int age;
    char id[10];
};

int main()
{
    struct Stu s = { "小明",18,"ad1254656" };
    printf("%s %d %s",s.name,s.age,s.id);
    return 0;
}
2.2结构体指针访问指向变量的成员

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

#include <stdio.h>

struct Stu
{
    char name[20];  
    int age;
    char id[10];
};

void print(struct Stu* pa)
{
    printf("%s %d %s\n",pa->name,pa->age,pa->id);
    printf("%s %d %s\n", (*pa).name,(*pa).age,(*pa).id);
}

int main()
{
    struct Stu s = { "小明",18,"ad1254656" };
    print(&s);
    return 0;
}

3.结构体传参

#include <stdio.h>

struct Stu
{
    char name[20];  
    int age;
    char id[10];
};

void print1(struct Stu s)
{
    printf("%s &d %s\n", s.name,s.age,s.id);
}

void print2(struct Stu* pa)
{
    printf("%s %d %s\n",pa->name,pa->age,pa->id);
    printf("%s %d %s\n", (*pa).name,(*pa).age,(*pa).id);
}

int main()
{
    struct Stu s = { "小明",18,"ad1254656" };
    print1(s);  //传结构体
    print2(&s); //传地址
    return 0;
}

上面的代码中有两个print函数,首选print2函数。

原因:

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

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

总结:

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

上一章:C语言入门学习 — 6.指针

配套练习:

C语言练习题110例(一)
C语言练习题110例(二)
C语言练习题110例(三)
C语言练习题110例(四)
C语言练习题110例(五)
C语言练习题110例(六)
C语言练习题110例(七)
C语言练习题110例(八)
C语言练习题110例(九)
C语言练习题110例(十)
C语言练习题110例(十一)

标签:char,struct,入门,C语言,---,Stu,pa,结构
From: https://blog.csdn.net/zhongziqia/article/details/136666896

相关文章

  • C语言入门学习 --- 9.编程练习题
    1.正整数A和正整数B的最小公倍数是指能被A和B整除的最小的正整数,设计一个算法,求输入A和B的最小公倍数。输入描述:输入两个正整数A和B。输出描述:输出A和B的最小公倍数。输入:57输出:35#include<stdio.h>intmain(){ inta=0; intb=0; inti=0; scanf("%d%......
  • Golang - 三个点‘...‘的用法
    用法1)主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数(可选参数)packagemainimport"fmt"functest(args...string){//可以接受任意个string参数for_,v:=rangeargs{fmt.Println(v)}}funcmain(){varstr=[]string{......
  • Golang - grpc和http的区别
    gRPC和HTTP都是网络协议,但是它们之间存在一些显著的区别。1、传输协议HTTP使用文本基础的协议,而gRPC使用的是二进制协议,这意味着gRPC数据包更小,传输效率更高。另外,gRPC使用HTTP/2协议,支持多路复用,从而可以更好地处理并发请求。2、性能差异gRPC在性能方面优于HTTP。由于使用了二进......
  • 算法入门书籍(二)--2024.03.13
    小学C++编程入门书籍及相关资料介绍(二)算法篇小学C++编程入门书籍及相关资料介绍(二)算法篇_c++教材-CSDN博客 算法入门书籍--2022.04.04算法入门书籍--2022.04.04-CSDN博客1、聪明人的游戏信息学探秘.提高篇-2017年06月2、啊哈!算法3、哇,编程!——跟小明一起学......
  • 01-列表操作-使用slice()命名切片,增强程序可读及可维护性,兼使用indices()方法,防止出现
    程序中的切片,使用原始的索引访问时,如果数量过多,时间久了,就会导致难以阅读和维护。但使用slice()函数,创建【命名切片】后,赋予了切片与现实相近的名称,让程序更容易理解。同时,slice类中的indices方法,返回start,stop,step,3个值组成的元组。并且indices()对3个值进行自动调整,确......
  • 01-deque类-双端队列-完全解读
    1 deque类的适用场景1.1适用场景deque并非列表的完美替代,一般情况下,它最适用于:1.1 左入右出,或者,右入左出的数据结构。    只通过对其两端数据的操作,实现压入和弹出。比如:简单的堆栈1.2 创建有限长度的数据集,对近期有限事务或类似数据池的追踪记录。比如:日......
  • 02-defaultdic类工作原理及应用实例(全网最全?含常值函数的创建)
    经常看到说“优雅地书写代码”,总是没啥感觉,直到这两天认真查阅了defaultdic这个类的一些资料。原来,灵活的应用,真的可以这么优雅、简单。1 简要描述defaultdic是collections包中的一个扩展类,是内置dict类的子类。这个类比较简单,除了重写了dict类的__miss__方法,增加了一个......
  • Python之Web开发中级教程----搭建Web框架二
    Python之Web开发中级教程----搭建Web框架二搭建虚拟环境虚拟环境的作用虚拟环境可以搭建独立的python运行环境,使得单个项目的运行环境与其它项目互不影响.搭建虚拟环境 (1)安装sudopipinstallvirtualenvsudopipinstallvirtualenvwrapper(2)配置环境变量1)创建......
  • php的strpos-mb_strpos
    php版本如下PHP7.3.10PHP8.3.0当版本来到8.3.0之后,strpos和mb_strpos功效基本一致。但是在7.3.10这个版本,strpos无法接受非字符串查询类型,去按照预定查找对应的字符串。举例如下:1var_dump(strpos("123456",12));2//输出false不符合预期查找ps:如果版......
  • C语言自学笔记6----C语言的循环语句
    C语言的循环语句C语言for循环在编程中,循环用于重复代码块,直到满足指定条件为止。C语言编程具有三种循环类型:for循环while循环do…while循环for循环(Loop)for循环的语法为:示例for(initializationStatement;testExpression;updateStatement){//循环体内......