首页 技术 正文
技术 2022年11月12日
0 收藏 504 点赞 2,518 浏览 2780 个字

【文章摘要

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

本文以实际的程序代码为例。具体地介绍怎样正确地使用结构体參数变量。为相关的开发工作提供了參考。

【关键词

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

一、前言

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

// 员工信息结构体

typedef struct

{

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

UINT16  iEmployeeAge;                    // 员工年龄

UINT32  iEmployeeNo;                      // 员工工号

} TEmployeeInfo;

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

INT32 GetEmployeeInfo(TEmployeeInfo *ptEmployeeInfo);

在主函数main中,採用两种參数传递的方法,一种是

*

*

*

* 版本号: 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所看到的:

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

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

从图3能够看出。程序运行结果正确,得到了我们想要的结果。

五、总结

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

(1) 程序头部、函数头部及重要的程序语句处一定要有凝视,这体现了软件开发者的专业素质。

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

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

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

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

(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426。欢迎关注!

)

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,133
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,297