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函数。

原因:

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

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

结论:

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

相关文章
|
17天前
|
C语言
C语言结构体内存对齐
C语言结构体内存对齐
C4.
|
1月前
|
存储 数据管理 C语言
C语言的结构体数组
C语言的结构体数组
C4.
22 0
C4.
|
1月前
|
搜索推荐 C语言
C语言的结构体变量
C语言的结构体变量
C4.
10 0
|
1月前
|
编译器 Linux C语言
c语言结构体知识系统详解
c语言结构体知识系统详解
50 0
|
20天前
|
存储 编译器 Linux
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
|
17天前
|
存储 C语言
C语言自定义类型结构体详解
在C语言中,结构体是复合数据类型,能组合不同类型的数据显示。定义结构体用`struct`关键字,如`struct Student {char name[20]; int age; float score;};`。声明结构体变量如`struct Student stu1;`,访问成员用`.`操作符,如`stu1.age = 20;`。初始化可直接赋值`struct Student stu1 = {"李四", 22, 85.5};`。结构体数组如`struct Student stuArray[3]`,结构体指针如`struct Student *pStu = &stu1;`。
5 0
|
20天前
|
存储 搜索推荐 编译器
【C语言】一篇文章深入解析联合体和枚举且和结构体的区别
【C语言】一篇文章深入解析联合体和枚举且和结构体的区别
|
20天前
|
存储 网络协议 编译器
【C语言】自定义类型:结构体深入解析(三)结构体实现位段最终篇
【C语言】自定义类型:结构体深入解析(三)结构体实现位段最终篇
|
28天前
|
存储 编译器 C语言
【C语言】结构体的大小是如何计算的?(结构体对齐)
【C语言】结构体的大小是如何计算的?(结构体对齐)
27 0