📜  C语言结构和指针(1)

📅  最后修改于: 2023-12-03 15:30:16.385000             🧑  作者: Mango

C语言结构和指针

C语言结构和指针是C语言中非常重要的概念,它们可以帮助我们更好地组织和处理数据。在本文中,我们将学习这两个概念的基础知识和一些示例。

结构体

C语言中的结构体是一种用户定义的数据类型,它可以包含不同的数据类型,如整数、字符、浮点数等等。结构体的定义方式为:

struct 结构体名 {
    数据类型1 变量名1;
    数据类型2 变量名2;
    ...
};

下面是一个示例,定义了一个学生的结构体:

struct Student {
    int id;
    char name[20];
    int age;
    float score;
};

可以看到,这个结构体包含了学生的学号、姓名、年龄和成绩四个数据。我们可以根据这个结构体的定义,定义一个变量来存储一个具体的学生的信息。

struct Student stu1;
stu1.id = 10001;
strcpy(stu1.name, "Tom");
stu1.age = 18;
stu1.score = 95.5;

这里我们定义了一个名为stu1的结构体变量,并给它的成员变量赋值。成员变量可以通过“.”操作符来访问。例如,要访问结构体变量stu1的id成员变量,可以这样写:

int id = stu1.id;
指针

指针是C语言中非常重要的概念,它可以帮助我们动态地分配内存、传递参数以及优化程序性能。指针是一个存储内存地址的变量,可以通过“*”操作符来访问所指向的内存单元。

下面是一个示例,定义了一个指向整数类型的指针变量ptr:

int *ptr;

这里我们使用了“*”操作符来说明这是一个指针变量。指针变量必须要进行初始化,在没有初始化之前,指针变量不指向任何有效的内存单元。我们可以通过“&”操作符来获取某个变量的内存地址,并将该地址赋给指针变量。

int num = 10;
int *ptr = #

这里我们定义了一个变量num,并获取了它的内存地址,并将该地址赋给了指针变量ptr。这个指针变量现在指向了num所在的内存单元。

我们可以通过“*”操作符来访问指针所指向的内存单元的值。

int num = 10;
int *ptr = #
*ptr = 20;

这里我们将ptr所指向的内存单元的值修改为20。现在,变量num的值也变成了20。

指针还可以指向数组和结构体。例如,我们可以定义一个指向结构体的指针,并使用“->”操作符来访问结构体成员变量。

struct Student {
    int id;
    char name[20];
    int age;
    float score;
};

struct Student stu1;
stu1.id = 10001;
strcpy(stu1.name, "Tom");
stu1.age = 18;
stu1.score = 95.5;

struct Student *ptr = &stu1;
ptr->score = 98.0;

这里我们定义了一个指向结构体Student的指针ptr,并将其指向了变量stu1。然后,我们使用“->”操作符来访问stu1的成员变量score,并将其设置为98.0。

示例

下面是一个示例,演示了结构体和指针的使用。该程序定义了一个学生结构体,包含学号、姓名、年龄和成绩四个数据,然后定义了一个指向结构体的指针,将结构体指针作为函数参数传递给一个函数,并在函数中修改结构体的成员变量的值。

#include <stdio.h>
#include <string.h>

struct Student {
    int id;
    char name[20];
    int age;
    float score;
};

void modify(struct Student *stu) {
    stu->score = 98.0;
}

int main() {
    struct Student stu1;
    stu1.id = 10001;
    strcpy(stu1.name, "Tom");
    stu1.age = 18;
    stu1.score = 95.5;

    printf("Before modification:\n");
    printf("id    = %d\n", stu1.id);
    printf("name  = %s\n", stu1.name);
    printf("age   = %d\n", stu1.age);
    printf("score = %f\n", stu1.score);

    modify(&stu1);

    printf("\nAfter modification:\n");
    printf("id    = %d\n", stu1.id);
    printf("name  = %s\n", stu1.name);
    printf("age   = %d\n", stu1.age);
    printf("score = %f\n", stu1.score);

    return 0;
}

输出结果如下:

Before modification:
id    = 10001
name  = Tom
age   = 18
score = 95.500000

After modification:
id    = 10001
name  = Tom
age   = 18
score = 98.000000

这个程序定义了一个函数modify,该函数接受一个指向Student结构体的指针作为参数,并将该结构体的score成员变量修改为98.0。在main函数中,我们定义了结构体变量stu1,并初始化其成员变量的值。然后我们调用modify函数,并将stu1的地址传递给了该函数。在modify函数中,我们使用“->”操作符来访问stu1的成员变量score,并修改它的值。在main函数中,我们输出了修改前后的stu1的值,可以看到,score的值已经从95.5修改为98.0了。

总结

C语言中结构体和指针的应用非常广泛,不仅可以帮助我们更好地组织和处理数据,还可以提高程序的性能和可维护性。本文介绍了结构体和指针的基础概念,并提供了一个使用结构体和指针的示例程序。希望能对C语言程序员有所帮助。