• ------构造类型数据—结构体---- + ----函数-----


    构造类型数据——结构体

    1)结构体的基本概念

    结构体(struct)是C语言(以及其他一些编程语言)中用于将不同类型的数据组合成一个单一类型的方式。这种数据类型允许你将多个变量(可能是不同类型)组合成一个单一的实体。结构体中的每个成员都可以有它自己的数据类型。

    以下是一个简单的结构体定义示例:

    #include 
    
    // 定义一个名为Student的结构体
    struct Student {
        char name[50];
        int age;
        float score;
    };
    
    int main() {
        // 声明一个Student类型的变量
        struct Student stu1;
    
        // 为stu1的成员赋值
        strcpy(stu1.name, "张三");
        stu1.age = 20;
        stu1.score = 90.5;
    
        // 输出stu1的信息
        printf("Name: %s, Age: %d, Score: %.1f\n", stu1.name, stu1.age, stu1.score);
    
        return 0;
    }
    

    2)结构体数组

    结构体数组是一个可以包含多个结构体元素的数组。每个元素都是结构体类型的一个实例。

    以下是一个结构体数组的示例:

    #include 
    #include 
    
    struct Student {
        char name[50];
        int age;
        float score;
    };
    
    int main() {
        // 声明一个包含3个Student类型元素的数组
        struct Student students[3];
    
        // 为数组中的元素赋值
        strcpy(students[0].name, "张三");
        students[0].age = 20;
        students[0].score = 90.5;
    
        strcpy(students[1].name, "李四");
        students[1].age = 21;
        students[1].score = 85.0;
    
        // ... 可以继续为students[2]赋值
    
        // 输出所有学生的信息
        for (int i = 0; i < 3; i++) {
            printf("Name: %s, Age: %d, Score: %.1f\n", students[i].name, students[i].age, students[i].score);
        }
    
        return 0;
    }
    

    3)指向结构体类型的指针变量

    指向结构体类型的指针变量用于存储结构体类型变量的内存地址。你可以使用这个指针来访问结构体中的成员。

    以下是一个指向结构体类型的指针变量的示例:

    #include 
    #include 
    
    struct Student {
        char name[50];
        int age;
        float score;
    };
    
    int main() {
        // 声明一个Student类型的变量并为其赋值
        struct Student stu1;
        strcpy(stu1.name, "张三");
        stu1.age = 20;
        stu1.score = 90.5;
    
        // 声明一个指向Student类型的指针变量并使其指向stu1
        struct Student *p = &stu1;
    
        // 使用指针访问stu1的成员并输出其信息
        printf("Name: %s, Age: %d, Score: %.1f\n", p->name, p->age, p->score);
    
        return 0;
    }
    

    注意,在使用->运算符时,左侧是指向结构体的指针,右侧是结构体的成员名。这与.运算符不同,.运算符用于直接访问结构体变量的成员。

    好的,下面我会逐一解释您列出的函数相关的主题,并给出相应的代码示例。

    函数

    1)函数的基本概念,函数的定义、说明和调用

    函数是执行特定任务的代码块,它接受输入(参数),处理这些输入,然后可能返回一个值。

    定义

    #include 
    
    // 定义一个函数
    void printHello() {
        printf("Hello, World!\n");
    }
    
    int main() {
        // 调用函数
        printHello();
        return 0;
    }
    

    2)函数的返回值

    函数可以返回一个值给调用者。这个值在函数中使用return语句返回。

    示例

    #include 
    
    // 定义一个返回整数值的函数
    int add(int a, int b) {
        return a + b;
    }
    
    int main() {
        int sum = add(3, 5); // 调用函数并接收返回值
        printf("The sum is %d\n", sum);
        return 0;
    }
    

    3)参数的传递,数值传递和地址传递

    数值传递:在C语言中,默认情况下,参数是通过值传递的。这意味着函数会接收参数值的副本。

    地址传递(或引用传递):在C语言中,虽然没有直接的引用传递,但我们可以使用指针来模拟地址传递。

    示例(地址传递):

    #include 
    
    // 使用指针(地址传递)修改变量的值
    void increment(int *p) {
        (*p)++;
    }
    
    int main() {
        int x = 5;
        increment(&x); // 传递x的地址给函数
        printf("x is now %d\n", x); // 输出6
        return 0;
    }
    

    4)函数的嵌套调用

    一个函数可以调用另一个函数,而被调用的函数本身也可以调用其他函数,这就是函数的嵌套调用。

    示例

    #include 
    
    void printTwice(char *str) {
        printf("%s\n", str);
        printHello(); // 嵌套调用另一个函数
    }
    
    void printHello() {
        printf("Hello, World!\n");
    }
    
    int main() {
        printTwice("First message");
        return 0;
    }
    

    5)数组作为函数参数

    在C语言中,数组可以通过指针传递给函数。当我们传递数组给函数时,实际上传递的是数组首元素的地址。

    示例

    #include 
    
    // 使用数组作为函数参数
    void printArray(int arr[], int size) {
        for (int i = 0; i < size; i++) {
            printf("%d ", arr[i]);
        }
        printf("\n");
    }
    
    int main() {
        int numbers[] = {1, 2, 3, 4, 5};
        printArray(numbers, 5); // 传递数组和大小给函数
        return 0;
    }
    

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    计算机视觉的分类
    YOLO目标检测——红外车辆行人数据集【(含对应voc、coco和yolo三种格式标签+划分脚本+训练教程】
    苹果酸-壳聚糖纳米孔水凝胶微球/SA/CS/GT三元复合/载血小板源性生长因子壳聚糖水凝胶微球
    【二叉树 Java】二叉树的层序遍历
    ESP32设备通信-Mesh网络传感器数据收发
    docker容器导出报错
    力扣经典题目解析--最小覆盖子串
    ROS问题汇总以及vscode配置问题
    [ANT]apache ant 安装说明
    Golang并发编程——goroutine、channel、sync
  • 原文地址:https://blog.csdn.net/2201_75637762/article/details/139748912