文章目录

  • 一、结构体 数组 作为函数参数 ( 数组 在 栈内存创建 )
  • 二、完整代码示例

一、结构体 数组 作为函数参数 ( 数组 在 栈内存创建 )


声明结构体类型 : 定义 结构体 数据类型 , 同时为该结构体类型声明 别名 , 可以直接使用 别名 结构体变量名 声明结构体类型变量 , 不需要在前面添加 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 :
18Input Age :
16Input Age :
19
Student age = 16
Student age = 18
Student age = 19
请按任意键继续. . .

【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 栈内存创建 )相关推荐

  1. 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )

    文章目录 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 二.完整代码示例 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 在上一篇博客 [C 语言]结构体 ( 结构体 数 ...

  2. C语言多维数组做函数参数会退化,数组做函数参数退化问题

    一.数组做函数参数退化问题 数组做函数参数时,会退化为指针. 1.把数组的内存首地址和数组的有效长度传入函数. 2.实参数组和函数参数数组的数据类型不一样.形参中的数组,编译器会把它当做一个指针处理, ...

  3. 6.4数组作为函数参数

    数组作为函数参数 数组作为函数参数 一.数组元素作为函数参数 二.一维数组名作为函数参数 三.多维数组名作为函数参数 一.数组元素作为函数参数 数组元素可以作为函数实参,但不可以作为函数形参. 实参可 ...

  4. 一维数组作为函数参数的使用

    一维数组作为函数参数 数组有两个特性 1.不允许拷贝数组 2.使用数组时会将其转换成指针 由于不能拷贝数组,那么我们不能按照值传递的方式使用数组,又因为数组在使用的时候会转换成指针,所以可以通过指针传 ...

  5. C语言数组、结构体、结构体数组作为函数参数

    数组作为函数参数 如果想把一个数组名参数传递给函数,正确的函数形参应该是怎样的?它是应该声明为一个指针还是一个数组? 调用函数时实际传递的是一个指针,所以函数的形参实际上是一个指针,但为了使程序员新手 ...

  6. C语言 二维数组作为函数参数的4种方式

    前言 多维数组中,二维数组是最常用的一种.在C语言编程中,二维数组的定义.取值以及赋值都比较容易,与一维数组类似.然而,在将二维数组作为函数参数传递时,参数结构较复杂,难以理解.本文章是实用型文章,注 ...

  7. C语言多维数组做函数参数技术推演

    多维数组做函数参数技术 C语言中只会以机械式的值拷贝的方式传递参数(实参把值传给形参) 二维数组参数同样存在退化的问题 等价关系 C语言中只会以机械式的值拷贝的方式传递参数(实参把值传给形参) int ...

  8. 【C语言进阶深度学习记录】三十一 数组作为函数参数时退化为指针

    之前的学习数组的文章中,已经知道一维数组作为函数参数的时候,最终会被编译器编译为指针.今天来看看二维数组的情形 文章目录 1 为什么C语言中的数组作为函数参数会退化为指针? 2 二维数组作为函数参数如 ...

  9. c语言学习-自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数)

    c语言自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数) 程序流程图: 代码: #include<stdio.h> char strupr(char ch[ ...

最新文章

  1. Python 知识点笔记一常用数据类型
  2. Struts的基础案例的步骤
  3. nowcoder 202F-平衡二叉树
  4. kinect数据读取
  5. android动画效果 translate,Android利用translate、scale、alpha、rotate实现动画效果
  6. ASP.NET MVC中使用DropDownList
  7. 前端学习(3103):vue+element今日头条管理-hello-react案例
  8. java php des加密 byte数组16进制 DESTools
  9. PB 循环删除树的所有根节点
  10. 吧唧下工作的事情 - 记用canvas封装的小小控件
  11. 程序员电脑(减少辐射)(¥37)
  12. 智和网管:深入国产化需求,扎根网络运维安全
  13. 环信服务器发送消息,环信服务器发送消息
  14. (翻译)预览(Preview)
  15. w7计算机管理哪个是显卡,win7怎么看显卡配置以及win7怎么看电脑完整配置
  16. 苹果指责三星收高版税:三星说苹果抄我们的
  17. 【蜂口 | AI人工智能】人脸美颜——龙鹏 深度学习与人脸图像应用连载(八)...
  18. USB-IF发布MIDI设备2.0版USB设备类规范
  19. MMA-清除所有变量的方法
  20. 杰理-watch-手表-AC701-双击屏幕唤醒

热门文章

  1. fabric 图形放大后边框保持不变
  2. android studio 安装
  3. MySql安装教程,Win11环境
  4. python绘制折线图保存_Python利用matplotlib绘制折线图的新手教程
  5. 一个需要充值游戏币的猜数游戏!!!
  6. 微信小程序getPhoneNumber接口code=40013
  7. 数电实验六:利用MSI设计组合逻辑电路
  8. Misc Buu wp 1
  9. 生成模型(Generative Model)
  10. 怎样判断漂亮女孩是不是单身的?