Welcome

首页 / 软件开发 / C语言 / C语言中结构体参数变量传递简介

C语言中结构体参数变量传递简介2015-01-20在C语言中,结构体参数变量经常作为函数的参数来进行传递。但如果参数设置不当,会出现内存问题。

本文以实际的程序代码为例,详细地介绍如何正确地使用结构体参数变量,为相关的开发工作提供了参考。

一、前言

本文中的程序实现对员工信息结构体字段赋值并打印出来的功能。该结构体的定义如下:

// 员工信息结构体typedef struct{ INT8 szEmployeeName[100]; // 员工姓名 UINT16iEmployeeAge;// 员工年龄 UINT32iEmployeeNo;// 员工工号} TEmployeeInfo;
函数GetEmployeeInfo用来对员工信息字段进行赋值,其声明如下:

INT32 GetEmployeeInfo(TEmployeeInfo *ptEmployeeInfo);

在主函数main中,采用两种参数传递的方法,一种是指针传递,另一种是非指针传递。

二、采用指针传递时的程序代码

采用指针传递时的程序代码如下:

* 修改记录1:// 修改历史记录, 包括修改日期、版本号、修改人及修改内容* 修改日期: 20140617* 版本号: V1.0* 修改人: Zhou Zhaoxiong* 修改内容:创建**********************************************************************/#include <stdio.h>#include <string.h>// 数据类型typedef signed char INT8;typedef unsigned char UINT16;typedef unsigned intUINT32;typedef signed intINT32;// 员工信息结构体typedef struct{ INT8szEmployeeName[100];// 员工姓名 UINT16iEmployeeAge; // 员工年龄 UINT32iEmployeeNo;// 员工工号} TEmployeeInfo;// 函数声明INT32 GetEmployeeInfo(TEmployeeInfo *ptEmployeeInfo); // 获取员工信息函数INT32 main(void);/***************************************************************** 功能描述:主函数* 输入参数:无 * 输出参数:无* 返回值: 0-执行成功-1-执行失败 * 其他说明:无* 修改日期版本号修改人修改内容* ----------------------------------------------------------------------------------------* 20140617V1.0Zhou Zhaoxiong 创建****************************************************************/INT32 main(void){INT32iRetValue= 0; // 该变量用于表示调用GetEmployeeInfo函数返回的值TEmployeeInfo *ptEmployeeInfo = NULL;// 该变量用于存放员工信息 // 调用函数对员工信息字段赋值, 并打印出来iRetValue = GetEmployeeInfo(ptEmployeeInfo);if (iRetValue != 0){printf("exec GetEmployeeInfo failed.
");return -1;} printf("员工信息为: 
姓名: %s
年龄: %d
工号: %d
", ptEmployeeInfo->szEmployeeName, ptEmployeeInfo->iEmployeeAge, ptEmployeeInfo->iEmployeeNo); return 0;}/*********************************************************************** 功能描述:对员工信息字段赋值* 输入参数: ptEmployeeInfo: 员工信息结构体* 输出参数: ptEmployeeInfo: 员工信息结构体* 返回值: 0-成功-1-失败* 其它说明:无* 修改日期版本号 修改人 修改内容* --------------------------------------------------------------------------------------* 20140617 V1.0 Zhou Zhaoxiong创建***********************************************************************/INT32 GetEmployeeInfo(TEmployeeInfo *ptEmployeeInfo){// 先对输入的指针参数进行异常判断if (ptEmployeeInfo == NULL){printf("Input parameter is NULL.
");return -1;} strncpy((char *)ptEmployeeInfo->szEmployeeName, "Li Yuanfang", strlen("Li Yuanfang")); // 对姓名字段赋值ptEmployeeInfo->iEmployeeAge = 100; // 对年龄字段赋值ptEmployeeInfo->iEmployeeNo= 123456;// 对工号字段赋值 return 0; // 赋值成功, 返回0}