【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 栈内存创建 )
文章目录
- 一、结构体 数组 作为函数参数 ( 数组 在 栈内存创建 )
- 二、完整代码示例
一、结构体 数组 作为函数参数 ( 数组 在 栈内存创建 )
声明结构体类型 : 定义 结构体 数据类型 , 同时为该结构体类型声明 别名 , 可以直接使用 别名 结构体变量名 声明结构体类型变量 , 不需要在前面添加 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 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 栈内存创建 )相关推荐
- 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )
文章目录 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 二.完整代码示例 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 在上一篇博客 [C 语言]结构体 ( 结构体 数 ...
- C语言多维数组做函数参数会退化,数组做函数参数退化问题
一.数组做函数参数退化问题 数组做函数参数时,会退化为指针. 1.把数组的内存首地址和数组的有效长度传入函数. 2.实参数组和函数参数数组的数据类型不一样.形参中的数组,编译器会把它当做一个指针处理, ...
- 6.4数组作为函数参数
数组作为函数参数 数组作为函数参数 一.数组元素作为函数参数 二.一维数组名作为函数参数 三.多维数组名作为函数参数 一.数组元素作为函数参数 数组元素可以作为函数实参,但不可以作为函数形参. 实参可 ...
- 一维数组作为函数参数的使用
一维数组作为函数参数 数组有两个特性 1.不允许拷贝数组 2.使用数组时会将其转换成指针 由于不能拷贝数组,那么我们不能按照值传递的方式使用数组,又因为数组在使用的时候会转换成指针,所以可以通过指针传 ...
- C语言数组、结构体、结构体数组作为函数参数
数组作为函数参数 如果想把一个数组名参数传递给函数,正确的函数形参应该是怎样的?它是应该声明为一个指针还是一个数组? 调用函数时实际传递的是一个指针,所以函数的形参实际上是一个指针,但为了使程序员新手 ...
- C语言 二维数组作为函数参数的4种方式
前言 多维数组中,二维数组是最常用的一种.在C语言编程中,二维数组的定义.取值以及赋值都比较容易,与一维数组类似.然而,在将二维数组作为函数参数传递时,参数结构较复杂,难以理解.本文章是实用型文章,注 ...
- C语言多维数组做函数参数技术推演
多维数组做函数参数技术 C语言中只会以机械式的值拷贝的方式传递参数(实参把值传给形参) 二维数组参数同样存在退化的问题 等价关系 C语言中只会以机械式的值拷贝的方式传递参数(实参把值传给形参) int ...
- 【C语言进阶深度学习记录】三十一 数组作为函数参数时退化为指针
之前的学习数组的文章中,已经知道一维数组作为函数参数的时候,最终会被编译器编译为指针.今天来看看二维数组的情形 文章目录 1 为什么C语言中的数组作为函数参数会退化为指针? 2 二维数组作为函数参数如 ...
- c语言学习-自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数)
c语言自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数) 程序流程图: 代码: #include<stdio.h> char strupr(char ch[ ...
最新文章
- Python 知识点笔记一常用数据类型
- Struts的基础案例的步骤
- nowcoder 202F-平衡二叉树
- kinect数据读取
- android动画效果 translate,Android利用translate、scale、alpha、rotate实现动画效果
- ASP.NET MVC中使用DropDownList
- 前端学习(3103):vue+element今日头条管理-hello-react案例
- java php des加密 byte数组16进制 DESTools
- PB 循环删除树的所有根节点
- 吧唧下工作的事情 - 记用canvas封装的小小控件
- 程序员电脑(减少辐射)(¥37)
- 智和网管:深入国产化需求,扎根网络运维安全
- 环信服务器发送消息,环信服务器发送消息
- (翻译)预览(Preview)
- w7计算机管理哪个是显卡,win7怎么看显卡配置以及win7怎么看电脑完整配置
- 苹果指责三星收高版税:三星说苹果抄我们的
- 【蜂口 | AI人工智能】人脸美颜——龙鹏 深度学习与人脸图像应用连载(八)...
- USB-IF发布MIDI设备2.0版USB设备类规范
- MMA-清除所有变量的方法
- 杰理-watch-手表-AC701-双击屏幕唤醒