C语言结构体讲解

简介: C语言结构体讲解



结构体的声明

结构的基础知识

结构(结构体)

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

数组:一组 相同类型 元素的集合

结构的声明

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

member-list ——成员变量的列表

variable-list ——变量列表

为什么要出现结构体?

首先,结构体允许我们将不同类型的数据组合在一起,形成一个自定义的数据类型。这对于表示和操作复杂的数据结构非常有用,例如在图形学、数据库和网络编程中。

其次,结构体提供了一种将相关的数据和功能组织在一起的方式,以便更好地管理和访问这些数据。通过将相关的数据放在一起,我们可以更容易地维护和操作它们,同时也可以提高代码的可读性和可维护性。

此外,结构体还可以用于创建自定义的数据类型,以便更好地表示现实世界中的对象或概念。例如,我们可以使用结构体来表示一个学生 (复杂对象)人:名字+性别+年龄+电话+地址+

描述一个学生:

typedef struct Stu
{
char name[20];//名字 
int age;//年龄
char sex[5];//性别 
char id[20];//学号
}Stu;//分号不能丢

"typedef" 是 C++ 编程语言中的一个关键字,它可以用来为已经存在的数据类型定义一个新的名称。这样做可以使程序更加易读易懂,也可以简化程序中的代码。示例代码如下:

typedef int myInt; // 将 int 定义为 myInt
myInt a = 10; // 等价于 int a = 10;

这样,我们就可以使用 myInt 来代替 int,从而使代码更简洁易读。

Stu 是重命名产生的新的类型

结构成员的类型

在 C++ 编程语言中,结构体(struct)是一种用户自定义的数据类型,可以包含多个不同类型的成员变量。下面是一些常见的结构体成员类型示例:

整数类型:

struct Person {
    int age;
    // ...
};

浮点数类型:

struct Circle {
    float radius;
    // ...
};

字符类型:

struct Student {
    char name[20];
    // ...
};

字符串类型(使用字符数组)

struct Book {
    char title[50];
    // ...
};

枚举类型:

enum Gender { Male, Female };
struct Employee {
    Gender gender;
    // ...
};

自定义结构体类型:

struct Point {
    int x;
    int y;
};
struct Rectangle {
    Point topLeft;
};

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

定义:(全局变量//局部变量)

初始化:

定义变量的同时赋初值

//按照顺序初始化:

//指定成员来初始化:

结构体成员的访问

结构变量的成员是通过点操作符(.)访问的。

点操作符接受两个操作数。

例如:

错误写法:

实参传递给形参的时候,形参是实参的一份临时拷贝,对形参的修改不会影响实参

正确写法:

注:结构体的指针可以直接用->指向成员名

结构体传参

struct S {
    int data[1000];
    int num; 
};
struct S s = {{1,2,3,4}, 1000}; 
//结构体传参
void print1(struct S s)
{
    printf("%d\n", s.num);
}
//结构体地址传参
void print2(struct S* ps) 
{
    printf("%d\n", ps->num);
}
int main() 
{
print1(s); //传结构体 
print2(&s); //传地址 
return 0;
}

上面的 print1 和 print2 函数哪个好些?

答案是:首选print2函数。

原因:

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

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

结论:

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

相关文章
|
6天前
|
程序员 C语言
【C语言】初步认识结构体
【C语言】初步认识结构体
15 0
|
6天前
|
C语言
C语言结构体内存对齐
C语言结构体内存对齐
|
1天前
|
存储 C语言
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)(下)
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)
8 0
|
1天前
|
存储 C语言
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)(中)
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)
8 0
|
1天前
|
编译器 C语言 C++
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)(上)
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)
7 0
|
1天前
|
C语言
C语言初阶⑧(结构体)知识点和笔试题
C语言初阶⑧(结构体)知识点和笔试题
6 0
|
5天前
|
存储 C语言
C语言结构体—自定义类型—struct
C语言结构体—自定义类型—struct
12 0
|
6天前
|
存储 Serverless C语言
每天一道C语言编程(结构体的运用):这是一年的第几天?
每天一道C语言编程(结构体的运用):这是一年的第几天?
7 0
|
6天前
|
算法 C语言
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-2
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
6天前
|
算法 编译器 API
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-1
C语言易混淆、简单算法、结构体题目练习、常见关键字总结