欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

C語言中結(jié)構(gòu)體參數(shù)變量的傳遞

 c語言  結(jié)構(gòu)體  函數(shù)  參數(shù)  傳遞

成都創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)永和,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

 

一、前言

       本文中的程序?qū)崿F(xiàn)對(duì)員工信息結(jié)構(gòu)體字段賦值并打印出來的功能。該結(jié)構(gòu)體的定義如下:

// 員工信息結(jié)構(gòu)體
typedef struct
{
       INT8       szEmployeeName[100];     // 員工姓名
       UINT16  iEmployeeAge;                    // 員工年齡
       UINT32  iEmployeeNo;                      // 員工工號(hào)
} TEmployeeInfo;

 

        函數(shù)GetEmployeeInfo用來對(duì)員工信息字段進(jìn)行賦值,其聲明如下:

INT32 GetEmployeeInfo(TEmployeeInfo *ptEmployeeInfo);

 

       在主函數(shù)main中,采用兩種參數(shù)傳遞的方法,一種是指針傳遞,另一種是非指針傳遞。

 

二、采用指針傳遞時(shí)的程序代碼

       采用指針傳遞時(shí)的程序代碼如下:

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

*版權(quán)所有 (C)2014, Zhou Zhaoxiong。

*

*文件名稱: TestStruct.c

*文件標(biāo)識(shí):無

*內(nèi)容摘要:用于演示結(jié)構(gòu)體變量的用法

*其它說明:無

*當(dāng)前版本: V1.0

*作   者:

*完成日期: 20170711

*

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

#include <stdio.h>

#include <string.h>

 

 

// 數(shù)據(jù)類型

typedef signed   char INT8;

typedef unsigned char UINT16;

typedef unsigned int  UINT32;

typedef signed   int  INT32;

 

 

// 員工信息結(jié)構(gòu)體

typedef struct

{

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

       UINT16  iEmployeeAge;         // 員工年齡

       UINT32  iEmployeeNo;          // 員工工號(hào)

} TEmployeeInfo;

 

 

//函數(shù)聲明

INT32 GetEmployeeInfo(TEmployeeInfo *ptEmployeeInfo); //獲取員工信息函數(shù)

INT32 main(void);

 

 

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

*功能描述: 主函數(shù)                                            

*輸入?yún)?shù): 無                                                 

*輸出參數(shù): 無                                                

* 返回值: 0-執(zhí)行成功  -1-執(zhí)行失敗                           

* 其他說明:  無                                                

* 修改日期        版本號(hào)        修改人        修改內(nèi)容

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

* 20140617        V1.0      Zhou Zhaoxiong     創(chuàng)建

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

INT32 main(void)

{

   INT32          iRetValue      = 0;       // 該變量用于表示調(diào)用GetEmployeeInfo函數(shù)返回的值

   TEmployeeInfo *ptEmployeeInfo = NULL;   // 該變量用于存放員工信息

   

    // 調(diào)用函數(shù)對(duì)員工信息字段賦值, 并打印出來

    iRetValue = GetEmployeeInfo(ptEmployeeInfo);

    if (iRetValue != 0)

    {

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

        return -1;

    }

       

   printf("員工信息為: 姓名: %s年齡: %d工號(hào): %d\n",ptEmployeeInfo->szEmployeeName,ptEmployeeInfo->iEmployeeAge,ptEmployeeInfo->iEmployeeNo);

 

   return 0;

}

 

 

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

* 功能描述:對(duì)員工信息字段賦值

* 輸入?yún)?shù): ptEmployeeInfo: 員工信息結(jié)構(gòu)體

* 輸出參數(shù): ptEmployeeInfo: 員工信息結(jié)構(gòu)體

* 返回值: 0-成功  -1-失敗

* 其它說明:無

* 修改日期          版本號(hào)           修改人         修改內(nèi)容

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

* 20140617           V1.0         Zhou Zhaoxiong      創(chuàng)建

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

INT32 GetEmployeeInfo(TEmployeeInfo *ptEmployeeInfo)

{

    // 先對(duì)輸入的指針參數(shù)進(jìn)行異常判斷

    if (ptEmployeeInfo == NULL)

    {

        printf("Input parameter is NULL.\n");

        return -1;

    }

 

    strncpy((char *)ptEmployeeInfo->szEmployeeName, "Li Yuanfang", strlen("Li Yuanfang"));   // 對(duì)姓名字段賦值

    ptEmployeeInfo->iEmployeeAge = 100;       // 對(duì)年齡字段賦值

    ptEmployeeInfo->iEmployeeNo  = 123456;    // 對(duì)工號(hào)字段賦值

 

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

}

 

         程序的運(yùn)行結(jié)果如圖1所示:

C語言中結(jié)構(gòu)體參數(shù)變量的傳遞

圖1 采用指針傳遞時(shí)的程序代碼運(yùn)行結(jié)果

 

        從圖1可以看出,函數(shù)GetEmployeeInfo的入?yún)榭眨荒軐?shí)現(xiàn)賦值的功能。

 

三、改進(jìn)后的采用指針傳遞時(shí)的程序代碼

        既然程序打印出指針為空的信息,那么我們先對(duì)傳入的指針進(jìn)行賦值操作是不是就可以了呢?

        改進(jìn)后的采用指針傳遞時(shí)的程序代碼如下:

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

*版權(quán)所有 (C)2014, Zhou Zhaoxiong。

*

*文件名稱: TestStruct.c

*文件標(biāo)識(shí):無

*內(nèi)容摘要:用于演示結(jié)構(gòu)體變量的用法

*其它說明:無

*當(dāng)前版本: V1.0

*作   者:周兆熊

*完成日期: 20140617

*

*修改記錄1://修改歷史記錄,包括修改日期、版本號(hào)、修改人及修改內(nèi)容

*修改日期: 20140617

*版本號(hào): V1.0

*修改人: Zhou Zhaoxiong

*修改內(nèi)容:創(chuàng)建

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

#include <stdio.h>

#include <string.h>

 

 

// 數(shù)據(jù)類型

typedef signed   char INT8;

typedef unsigned char UINT16;

typedef unsigned int  UINT32;

typedef signed   int  INT32;

 

 

//員工信息結(jié)構(gòu)體

typedef struct

{

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

       UINT16  iEmployeeAge;         // 員工年齡

       UINT32  iEmployeeNo;          // 員工工號(hào)

} TEmployeeInfo;

 

 

//函數(shù)聲明

INT32 GetEmployeeInfo(TEmployeeInfo *ptEmployeeInfo); //獲取員工信息函數(shù)

INT32 main(void);

 

 

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

*功能描述: 主函數(shù)                                            

*輸入?yún)?shù): 無                                                

*輸出參數(shù): 無                                                

*返回值: 0-執(zhí)行成功 -1-執(zhí)行失敗                           

*其他說明: 無                                                 

*修改日期        版本號(hào)        修改人        修改內(nèi)容

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

* 20140617        V1.0      Zhou Zhaoxiong     創(chuàng)建

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

INT32 main(void)

{

   INT32          iRetValue      = 0;       // 該變量用于表示調(diào)用GetEmployeeInfo函數(shù)返回的值

   TEmployeeInfo *ptEmployeeInfo = NULL;   // 該變量用于存放員工信息

 

   //先對(duì)員工信息字段賦值,防止空指針的存在

   strncpy((char *)ptEmployeeInfo->szEmployeeName, "Di Renjie", strlen("Di Renjie"));   //對(duì)姓名字段賦值

   ptEmployeeInfo->iEmployeeAge = 150;       // 對(duì)年齡字段賦值

   ptEmployeeInfo->iEmployeeNo  = 654321;    // 對(duì)工號(hào)字段賦值

   

   // 調(diào)用函數(shù)對(duì)員工信息字段賦值,并打印出來

   iRetValue = GetEmployeeInfo(ptEmployeeInfo);

    if (iRetValue != 0)

    {

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

        return -1;

    }

       

    printf("員工信息為: 姓名: %s年齡: %d工號(hào): %d\n",ptEmployeeInfo->szEmployeeName,ptEmployeeInfo->iEmployeeAge,ptEmployeeInfo->iEmployeeNo);

 

    return 0;

}

 

 

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

*功能描述:對(duì)員工信息字段賦值

*輸入?yún)?shù): ptEmployeeInfo:員工信息結(jié)構(gòu)體

*輸出參數(shù): ptEmployeeInfo:員工信息結(jié)構(gòu)體

*返回值: 0-成功 -1-失敗

*其它說明:無

*修改日期          版本號(hào)           修改人         修改內(nèi)容

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

* 20140617           V1.0         Zhou Zhaoxiong      創(chuàng)建

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

INT32 GetEmployeeInfo(TEmployeeInfo *ptEmployeeInfo)

{

   // 先對(duì)輸入的指針參數(shù)進(jìn)行異常判斷

    if (ptEmployeeInfo == NULL)

    {

        printf("Input parameter is NULL.\n");

        return -1;

    }

 

    strncpy((char *)ptEmployeeInfo->szEmployeeName, "Li Yuanfang", strlen("Li Yuanfang"));   // 對(duì)姓名字段賦值

    ptEmployeeInfo->iEmployeeAge = 100;       // 對(duì)年齡字段賦值

    ptEmployeeInfo->iEmployeeNo  = 123456;    // 對(duì)工號(hào)字段賦值

 

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

}

 

          程序的運(yùn)行結(jié)果如圖2所示:

C語言中結(jié)構(gòu)體參數(shù)變量的傳遞

圖2 改進(jìn)后的采用指針傳遞時(shí)的程序代碼運(yùn)行結(jié)果

 

       可見,程序出現(xiàn)了內(nèi)存問題。原因是在傳遞之前,ptEmployeeInfo指針已經(jīng)指向了確定的地址,不能讓同一個(gè)指針同時(shí)指向不同的地址。

 

四、第二次改進(jìn)后的程序代碼

        既然不能用指針作為參數(shù)進(jìn)行傳遞,那么我們就要考慮另外的方法。

        以下代碼采用非指針的傳遞方式:

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

*版權(quán)所有 (C)2014, Zhou Zhaoxiong。

*

*文件名稱: TestStruct.c

*文件標(biāo)識(shí):無

*內(nèi)容摘要:用于演示結(jié)構(gòu)體變量的用法

*其它說明:無

*當(dāng)前版本: V1.0

*作   者:周兆熊

*完成日期: 20140617

*

*修改記錄1://修改歷史記錄,包括修改日期、版本號(hào)、修改人及修改內(nèi)容

*修改日期: 20140617

*版本號(hào): V1.0

*修改人: Zhou Zhaoxiong

*修改內(nèi)容:創(chuàng)建

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

#include <stdio.h>

#include <string.h>

 

 

// 數(shù)據(jù)類型

typedef signed   char INT8;

typedef unsigned char UINT16;

typedef unsigned int  UINT32;

typedef signed   int  INT32;

 

 

// 員工信息結(jié)構(gòu)體

typedef struct

{

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

       UINT16  iEmployeeAge;         // 員工年齡

       UINT32  iEmployeeNo;          // 員工工號(hào)

} TEmployeeInfo;

 

 

//函數(shù)聲明

INT32 GetEmployeeInfo(TEmployeeInfo *ptEmployeeInfo); //獲取員工信息函數(shù)

INT32 main(void);

 

 

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

*功能描述: 主函數(shù)                                            

*輸入?yún)?shù): 無                                                 

*輸出參數(shù): 無                                                

*返回值: 0-執(zhí)行成功 -1-執(zhí)行失敗                           

*其他說明: 無                                                

*修改日期       版本號(hào)       修改人       修改內(nèi)容

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

*20140617        V1.0      Zhou Zhaoxiong     創(chuàng)建

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

INT32 main(void)

{

    INT32         iRetValue     = 0;      // 該變量用于表示調(diào)用GetEmployeeInfo函數(shù)返回的值

   TEmployeeInfo tEmployeeInfo = {0};   // 該變量用于存放員工信息

   

   // 調(diào)用函數(shù)對(duì)員工信息字段賦值,并打印出來

   iRetValue = GetEmployeeInfo(&tEmployeeInfo);

    if (iRetValue != 0)

    {

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

        return -1;

    }

       

    printf("員工信息為: 姓名: %s年齡: %d工號(hào): %d\n",tEmployeeInfo.szEmployeeName,tEmployeeInfo.iEmployeeAge,tEmployeeInfo.iEmployeeNo);

 

    return 0;

}

 

 

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

*功能描述:對(duì)員工信息字段賦值

*輸入?yún)?shù): ptEmployeeInfo:員工信息結(jié)構(gòu)體

*輸出參數(shù): ptEmployeeInfo:員工信息結(jié)構(gòu)體

*返回值: 0-成功 -1-失敗

*其它說明:無

* 修改日期          版本號(hào)           修改人         修改內(nèi)容

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

* 20140617           V1.0         Zhou Zhaoxiong      創(chuàng)建

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

INT32 GetEmployeeInfo(TEmployeeInfo *ptEmployeeInfo)

{

   // 先對(duì)輸入的指針參數(shù)進(jìn)行異常判斷

    if (ptEmployeeInfo == NULL)

    {

        printf("Input parameter is NULL.\n");

        return -1;

    }

 

    strncpy((char *)ptEmployeeInfo->szEmployeeName, "Li Yuanfang", strlen("Li Yuanfang"));   // 對(duì)姓名字段賦值

    ptEmployeeInfo->iEmployeeAge = 100;       // 對(duì)年齡字段賦值

    ptEmployeeInfo->iEmployeeNo  = 123456;    // 對(duì)工號(hào)字段賦值

 

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

}

 

        程序的執(zhí)行結(jié)果如圖3所示:

C語言中結(jié)構(gòu)體參數(shù)變量的傳遞

圖3第二次改進(jìn)后的程序代碼執(zhí)行結(jié)果

 

        從圖3可以看出,程序執(zhí)行結(jié)果正確,得到了我們想要的結(jié)果。

 

五、總結(jié)

        在編寫代碼的過程中,我們需要注意以下方面:

       (1) 程序頭部、函數(shù)頭部及重要的程序語句處一定要有注釋,這體現(xiàn)了軟件開發(fā)人員的專業(yè)素養(yǎng)。

       (2) 函數(shù)中出現(xiàn)的變量在定義的同時(shí)要進(jìn)行初始化,函數(shù)在調(diào)用之前一定要先進(jìn)行聲明。

       (3) 對(duì)于函數(shù)中的指針變量參數(shù),在使用之前一定要先進(jìn)行異常判斷(即判斷其是否為NULL)。

       (4) 對(duì)于有返回值的函數(shù),要用不同的返回值來區(qū)別不同的執(zhí)行結(jié)果,并在重要的地方打印出提示信息,方便對(duì)代碼的調(diào)試。

 

        指針是C語言的精華所在,同時(shí)也是難點(diǎn)所在。對(duì)于一個(gè)合格的軟件開發(fā)工程師來說,一定要熟練掌握指針的使用方法。

網(wǎng)頁名稱:C語言中結(jié)構(gòu)體參數(shù)變量的傳遞
標(biāo)題網(wǎng)址:http://chinadenli.net/article18/pigidp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)微信小程序網(wǎng)站導(dǎo)航自適應(yīng)網(wǎng)站服務(wù)器托管網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)