手机版
你好,游客 登录 注册
背景:
阅读新闻

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

[日期:2014-07-24] 来源:Linux社区  作者:周兆熊 [字体: ]

四、第二次改进后的程序代码

既然不能用指针作为参数进行传递,那么我们就要考虑另外的方法。

以下代码采用非指针的传递方式:

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

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

*

* 文件名称: TestStruct.c

* 文件标识:无

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

* 其它说明:无

* 当前版本: V1.0

* 作 者:周兆熊

* 完成日期: 20140617

*

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

* 修改日期: 20140617

* 版本号: V1.0

* 修改人: Zhou Zhaoxiong

* 修改内容:创建

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

#include <stdio.h>

#include <string.h>

 

 

// 数据类型

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 tEmployeeInfo = {0}; // 该变量用于存放员工信息

 

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

iRetValue = GetEmployeeInfo(&tEmployeeInfo);

if (iRetValue != 0)

{

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

return -1;

}

 

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

}

 

程序的执行结果如图3所示:

 

图3第二次改进后的程序代码执行结果

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

 

从图3可以看出,程序执行结果正确,得到了我们想要的结果。

 

五、总结

在编写代码的过程中,我们需要注意以下方面:

(1) 程序头部、函数头部及重要的程序语句处一定要有注释,这体现了软件开发人员的专业素养。

(2) 函数中出现的变量在定义的同时要进行初始化,函数在调用之前一定要先进行声明。

(3) 对于函数中的指针变量参数,在使用之前一定要先进行异常判断(即判断其是否为NULL)。

(4) 对于有返回值的函数,要用不同的返回值来区别不同的执行结果,并在重要的地方打印出提示信息,方便对代码的调试。

 

指针是C语言的精华所在,同时也是难点所在。对于一个合格的软件开发工程师来说,一定要熟练掌握指针的使用方法。

本文永久更新链接地址http://www.linuxidc.com/Linux/2014-07/104647.htm

linux
相关资讯       C语言中结构体 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款