文章目录
一、结构体 数组 作为函数参数 ( 数组 在 栈内存创建 )
二、完整代码示例
一、结构体 数组 作为函数参数 ( 数组 在 栈内存创建 )
声明结构体类型 : 定义 结构体 数据类型 , 同时为该结构体类型声明 别名 , 可以直接使用 别名 结构体变量名 声明结构体类型变量 , 不需要在前面添加 struct 关键字 ;
typedef struct Student { char name[5]; int age; int id; }Student;
栈内存中声明结构体数组 :
// 声明结构体数组 , 该数组在栈内存中 Student array[3];
命令行中接收数据 , 填充到结构体数组元素中 :
// 命令行中 , 接收输入的年龄 for(i = 0; i < 3; i++) { printf("\n Input Age :\n"); // 命令换行中 接收 输入的年龄 , // 设置到 Student 数组元素的 age 成员中 scanf("%d", &(array[i].age)); }
结构体数组作为参数 : 使用 结构体数组 作为参数 , 可以进行间接赋值 , 修改该 结构体数组 的元素 , 可以当做返回值使用 ;
此时结构体 数组 会退化为 结构体指针 ;
/** * @brief sort_struct_array 对结构体数组 按照年龄进行排序 * @param array 结构体指针 * @param count 结构体数组的元素个数 */ void sort_struct_array(Student *array, int count) { // 循环控制变量 int i = 0, j = 0; // 学生年龄 Student tmp; // 验证数组合法性 if(array == NULL) { return; } // 排序 for(i = 0; i < count; i++) { for(j = i + 1; j < count; j++) { if(array[i].age > array[j].age) { tmp = array[i]; array[i] = array[j]; array[j] = tmp; } } } }
二、完整代码示例
完整代码示例 :
#include <stdio.h> #include <stdlib.h> #include <string.h> /** * @brief The Student struct * 定义 结构体 数据类型 , 同时为该结构体类型声明 别名 * 可以直接使用 别名 结构体变量名 声明结构体类型变量 * 不需要在前面添加 struct 关键字 */ typedef struct Student { char name[5]; int age; int id; }Student; /** * @brief printf_struct_array 打印结构体数组 * @param array 数组作为函数参数退化为指针 * @param count 数组中的元素个数 */ void printf_struct_array(Student *array, int count) { // 循环控制变量 int i = 0; // 验证数组合法性 if(array == NULL) { return; } // 打印结构体数组中的 结构体 age 字段 for(i = 0; i < count; i++) { printf("Student age = %d\n", array[i].age); } } /** * @brief sort_struct_array 对结构体数组 按照年龄进行排序 * @param array 结构体指针 * @param count 结构体数组的元素个数 */ void sort_struct_array(Student *array, int count) { // 循环控制变量 int i = 0, j = 0; // 学生年龄 Student tmp; // 验证数组合法性 if(array == NULL) { return; } // 排序 for(i = 0; i < count; i++) { for(j = i + 1; j < count; j++) { if(array[i].age > array[j].age) { tmp = array[i]; array[i] = array[j]; array[j] = tmp; } } } } /** * @brief 主函数入口 * @return */ int main(int argc, char* argv[], char**env) { // 声明结构体数组 , 该数组在栈内存中 Student array[3]; // 循环控制变量 int i = 0; // 命令行中 , 接收输入的年龄 for(i = 0; i < 3; i++) { printf("\n Input Age :\n"); // 命令换行中 接收 输入的年龄 , // 设置到 Student 数组元素的 age 成员中 scanf("%d", &(array[i].age)); } // 打印结构体数组中的 结构体 age 字段 printf_struct_array(array, 3); // 命令行不要退出 system("pause"); return 0; }
执行结果 :
Input Age : 18 Input Age : 16 Input Age : 19 Student age = 16 Student age = 18 Student age = 19 请按任意键继续. . .