C语言——结构体

2023-12-13 04:31:54

一、结构的基础知识

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

二、结构的声明

struct tag
{
    member-list;
}variable-list;

描述一个学生:

typedef struct Student
{
    char name[20]; //姓名
    int age; //年龄
    char sex; //性别
    char id[20]; //学号
}
Student;

三、结构成员的类型

结构的成员可以是标量、数组、指针,甚至是其他结构体。

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

有了结构体类型,如何定义变量。

struct Point
{
    int x;
    int y;
}p1;//结构体类型的同时定义变量p1。
struct Point p2;//结构体类型的同时定义变量p2。

// 初始化定义变量的同时赋初值。
struct Point p3 = {x,y};
 struct Student // 类型声明
 {
    char name[20]; //名字
    int age;      //年龄
 };
 struct Student stu = {"张三", 20};// 结构体变量的初始化。
 struct Node
 {
    int data;
    struct Node *next;
 }n1 = {10,{4,5},NULL};// 结构体嵌套的初始化。
 
 struct Node n2 = {20,{5,6},NULL};// 结构体嵌套的初始化。
 

四、结构体成员的访问

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

struct Student
{
    char name[20];
    int age;
};
struct Student s;

如何访问s的成员?如下:

struct S s;
strcpy (s.name,"张三");
s.age=18; //使用.运算符访问结构体成员变量

  • 结构体指针访问指向变量的成员,有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针

因此,我们需要使用->运算符来如何访问成员。

struct Student
{
? ? char name[20];
? ? int age;
};
void printf_student(struct Student *s)
{
? ? printf("姓名:%s 年龄:%d\n",(*s)name,(*s).age);
? ? //使用结构体指针访问成员变量
? ? printf("姓名:%s 年龄:%d\n",s->name,s->age);
}
int main()
{
? ? struct Student s={"张三",18};
? ? printf(&s);
? ? return 0;
}

五、结构体传参

#include<stdio.h>
struct Student
{
    char name[20];
    int age;
};
//结构体传参
void printf1(struct Student s)
{
    printf("姓名:%s 年龄:%d\n",s.name,s.age);
}
//结构体地址传参
void printf2(struct Student *s)
{
    printf("姓名:%s 年龄:%d\n",s->name,s->age);
}
int main()
{
    struct Student s={"张三",18};
    printf1(s);
    printf2(&s);
    
    return 0;
}

可见printf2函数好些,原因:? ? ? ?

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

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

文章来源:https://blog.csdn.net/W_Fe5/article/details/134919591
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。