设为首页 加入收藏

TOP

C语言中结构体参数变量的传递
2014-11-23 22:06:55 来源: 作者: 【 】 浏览:10
Tags:言中 结构 参数 变量 传递

【文章摘要】


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


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


【关键词】


C语言 结构体 函数 参数 传递


一、前言


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


// 员工信息结构体


typedef struct


{


INT8 szEmployeeName[100]; // 员工姓名


UINT16 iEmployeeAge; // 员工年龄


UINT32 iEmployeeNo; // 员工工号


} TEmployeeInfo;



函数GetEmployeeInfo用来对员工信息字段进行赋值,其声明如下:


INT32 GetEmployeeInfo(TEmployeeInfo *ptEmployeeInfo);



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


将C语言梳理一下,分布在以下10个章节中:


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


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


/**********************************************************************


* 版权所有 (C)2014, Zhou Zhaoxiong。


*


* 文件名称: TestStruct.c


* 文件标识:无


* 内容摘要:用于演示结构体变量的用法


* 其它说明:无


* 当前版本: V1.0


* 作 者:周兆熊


* 完成日期: 20140617


*


* 修改记录1:// 修改历史记录, 包括修改日期、版本号、修改人及修改内容


* 修改日期: 20140617


* 版本号: V1.0


* 修改人: Zhou Zhaoxiong


* 修改内容:创建


**********************************************************************/


#include


#include




// 数据类型


typedef signed char INT8;


typedef unsigned char UINT16;


typedef unsigned int UINT32;


typedef signed int INT32;




// 员工信息结构体


typedef struct


{


INT8 szEmployeeName[100]; // 员工姓名


UINT16 iEmployeeAge; // 员工年龄


UINT32 iEmployeeNo; // 员工工号


} TEmployeeInfo;




// 函数声明


INT32 GetEmployeeInfo(TEmployeeInfo *ptEmployeeInfo); // 获取员工信息函数


INT32 main(void);




/****************************************************************


* 功能描述: 主函数


* 输入参数: 无


* 输出参数: 无


* 返回值: 0-执行成功 -1-执行失败


* 其他说明: 无


* 修改日期 版本号 修改人 修改内容


* ----------------------------------------------------------------------------------------


* 20140617 V1.0 Zhou Zhaoxiong 创建


****************************************************************/


INT32 main(void)


{


INT32 iRetValue = 0; // 该变量用于表示调用GetEmployeeInfo函数返回的值


TEmployeeInfo *ptEmployeeInfo = NULL; // 该变量用于存放员工信息



// 调用函数对员工信息字段赋值, 并打印出来


iRetValue = GetEmployeeInfo(ptEmployeeInfo);


if (iRetValue != 0)


{


printf("exec GetEmployeeInfo failed.\n");


return -1;


}



printf("员工信息为: \n姓名: %s\n年龄: %d\n工号: %d\n", 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.\n");


return -1;


}



strncpy((char *)ptEmployeeInfo->szEmployeeName, "Li Yuanfang", strlen("Li Yuanfang")); // 对姓名字段赋值


ptEmployeeInfo->iEmployeeAge = 100; // 对年龄字段赋值


ptEmployeeInfo->iEmployeeNo = 123456; // 对工号字段赋值



return 0; // 赋值成功, 返回0


}



程序的运行结果如图1所示:


C语言中结构体参数变量的传递



图1 采用指针传递时的程序代码运行结果



从图1可以看出,函数GetEmployeeInfo的入参为空,不能实现赋值的功能。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java代理实现domino web邮件下载 下一篇C程序中唯一序列号的生成

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: