您的位置:首页 > 编程语言 > C语言/C++

C语言传参不支持引用

2015-10-24 23:48 501 查看
今天定义函数时,传参想像C++一样搞个 char*& 或 int&, 编译时报错.

实验了一会,才知道, C语言入参只能传值, 传指针,传指针的指针.

/// @file exam_1_8.c
/** @brief 
    8.	参考例L2_8.C编写一个程序,输入2个学生的姓名、学号、英语、数学、计算机成绩,输出这两个学生的姓名、学号和平均分。
*/

#include <stdlib.h>
#include <stdio.h>

/// 用CL编译, 不知道为啥不能使用 bool 类型, 自己定义一个
/// error C2065: 'bool' : undeclared identifier
/// bool 不是C语言内建的数据类型么?
#define LS_DEFINE
#ifdef LS_DEFINE
    typedef char bool;
    #define true 1
    #define false 0
#endif // #ifdef LS_DEFINE

#ifndef MAX_PATH
#define MAX_PATH 260
#endif // #ifndef MAX_PATH

#define NUM_STUDENT 2 ///< 总共2个学生

typedef struct tag_stuInfo
{
    char cName[MAX_PATH]; ///< 姓名
    int iNo; ///< 学号
    int iScoreEn; ///< 英文成绩
    int iScoreMath; ///< 数学成绩
    int iScoreCpt; ///< 计算机成绩
    int iScoreAverage; ///< 3科平均分, 算出来的
}TAG_STUINFO;

void clearScreen(); ///< 清屏
void procTask();
void ZeroStuInfo(TAG_STUINFO* pInfo);
void inputInfo(int iIndex, TAG_STUINFO* pInfo);
void printInfo(TAG_STUINFO* pInfo);

int main(int agrc, char** argv)
{
    clearScreen();
    procTask();
    return 0;
}

void procTask()
{
    int iIndex = 0;
    TAG_STUINFO Info[NUM_STUDENT];
    
    for (iIndex = 0; iIndex < NUM_STUDENT; iIndex++)
    {
        printf("\n");
        ZeroStuInfo(&Info[iIndex]);
        inputInfo(iIndex, &Info[iIndex]);
    }

    printf("\n");
    printf("student info list:\n");
    for (iIndex = 0; iIndex < NUM_STUDENT; iIndex++)
    {
        printInfo(&Info[iIndex]);
    }
}

void printInfo(TAG_STUINFO* pInfo)
{
    /// 输出这两个学生的姓名、学号和平均分。
    
    do 
    {
        if (NULL == pInfo)
            break;
        
        printf("No = [%d], name = [%s], ScoreAverage = [%d]\n",
            pInfo->iNo,
            pInfo->cName,
            pInfo->iScoreAverage);
    } while (0);
}

void inputInfo(int iIndex, TAG_STUINFO* pInfo)
{
    do 
    {
        if (NULL == pInfo)
            break;
        
        /// 输入信息
        printf("please input student[%d] name:", iIndex);
        scanf("%s", pInfo->cName);
        
        printf("please input student[%d] NO:", iIndex);
        scanf("%d", &pInfo->iNo);
        
        printf("please input student[%d] Score English:", iIndex);
        scanf("%d", &pInfo->iScoreEn);
        
        printf("please input student[%d] Score Math:", iIndex);
        scanf("%d", &pInfo->iScoreMath);

        printf("please input student[%d] Score Computer:", iIndex);
        scanf("%d", &pInfo->iScoreCpt);
        
        /// 求均分
        pInfo->iScoreAverage = pInfo->iScoreEn;
        pInfo->iScoreAverage += pInfo->iScoreMath;
        pInfo->iScoreAverage += pInfo->iScoreCpt;
        pInfo->iScoreAverage = (int)((pInfo->iScoreAverage + 0.5f) / 3);
    } while (0);
}

void ZeroStuInfo(TAG_STUINFO* pInfo)
{
    do 
    {
        if (NULL == pInfo)
            break;
        
        memset(pInfo->cName, sizeof(pInfo->cName), 0);
        pInfo->iNo = -1;
        pInfo->iScoreEn = 0;
        pInfo->iScoreMath = 0;
        pInfo->iScoreCpt = 0;
        pInfo->iScoreAverage = 0;
    } while (0);
}

void clearScreen()
{
    system("cls");
}


编译脚本

d:\
cd D:\ls\lesson\2015_1023\exam_1_8

del *.exe
del *.obj

"C:\Program Files\Microsoft Visual Studio\VC98\Bin\cl" /c /W3 /WX /O2 exam_1_8.c
"C:\Program Files\Microsoft Visual Studio\VC98\Bin\link" exam_1_8.obj

call exam_1_8.exe
pause


运行效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: