zoukankan      html  css  js  c++  java
  • 函数学习笔记

    int (&array)[10] 中的括号是不可以活力的,如果省略了括号,"[]"运算符的优先级高于"&"运算符,便成了引用数组,而在C++语言中定义引用数组是非法的.
    int (&array)[10] 的格式是合法的,表示定义一个引用对象,它可以指向(严格地说应该是取代)具有10个元素的数组.这里回忆一下指针数组的定义.
    int *parray[5]; //定义一个指针数组
    对里如果对"*parray"使用括号括起来,其性质就变了.例如:
    int (*parray)[5]; //定义一个整形指针,可以指向5个元素的整形数组
    上述代码实际定义了一个整型指针,可以指向具有5个元素的数组.这与"int(&array)[10]"是类似的,
    "int (&array)[10]" 表示一个引用,指向具有10个元素的整型数组.因此,以"int (&array)[10]"形式定义函数参数列表,编译器会强制检查数据元素的个数,如果不为10,会显示编译错误.

    **指针或引用作为函数参数
    在C++语言中,函数参数的传递方式主要有两种,分别为值传递和引用传递.
    所谓值传递,是指在函数调用时,将实际参数的值复制一份传递到调用函数中.
    引用传递,是指在函数调用时,将实际参数的地址传递到调用函数中.

    void ValuePass(int *var)
    {
        *var = 10;
        printf("%d\n", *var);  
    }
    int main()
    {
        int ivar = 5;
        ValuePass(&ivar);
        printf("%d\n", ivar);
        return 0;
    }
    
    void ValuePass(int &var)
    {
        var = 10;
        printf("%d\n", var);  
    }
    int main()
    {
        int ivar = 5;
        ValuePass(ivar);
        printf("%d\n", ivar);
        return 0;
    }

    定义活力号形式的函数参数.

    #include "stdafx.h"
    #include "iostream.h"
    #include "stdarg.h"
    
    void OutputInfo(int num, ...)
    {
        va_list arguments;
        va_start(arguments, num);
        while(num--)
        {
            char * pchData = va_arg(arguments, char*);
            int iData = va_arg(arguments, int);
            printf("%s\n", pchData);
            printf("%d\n", iData);
    
        }
        va_end(arguments);
    
    }
    
    
    int main(int argc, char* argv[])
    {
    
        OutputInfo(2,"北京", 2008, "上海", 2012);
    
        return 0;
    }

    局部域中声明的函数将隐藏而不是重载全局域中的函数.

    #include "stdafx.h"
    #include "iostream.h"
    #include "stdarg.h"
    
    bool Validate(float x)
    {
        printf("浮点参数函数\n");
        return (x>0)?true:false;
    }
    bool Validate(int x)
    {
        printf("整数参数函数\n");
        return (x>0)?true:false;
    }
    
    int main(int argc, char* argv[])
    {
        bool Validate(double x, double y); //隐藏了全局域中的函数
        ::Validate(10.5f); //使用域运算符:: 才可调用第一个重载函数
        
    
        return 0;
    }
    
    bool Validate(double x, double y)
    {
        printf("实型参数函数\n");
        return (x>y)?true:false;
    }

    函数指针

    对于C++语言来说,函数名实际上是指向函数的长指针.例如,下面的代码定义了一个指向具有两个整型参数的函数指针.
    int (*ptfun)(int, int);
    也可以使用typedef定义一个函数指针类型,然后定义该类型的变量.例如:
    typedef int (*ptfun)(int, int);
    ptfun fun;
    使用函数指针调用函数:

    #include "stdafx.h"
    typedef int (*ptfun)(int, int); //定义一个函数指针类型
    int sum(int x, int y)
    {
        return x+y;
    }
    int main(int argc, char* argv[])
    {
        ptfun fun;  //定义一个函数指针变量
        fun = sum;  //将函数sum 赋值给函数指针变量
        int ret = fun(10, 20); //通过函数指针变量调用sum函数
        return 0;
    }

     重载函数模板

    #include "iostream.h"
    
    template <class type> //定义一个模板类型
    type Add(type Plus, type Summand) //定义一个重载的函数模板
    {
        return Plus + Summand; //返回两个数之和
    }
    template <class type> //定义一个模板类型
    type Add(type Array[], int nLen) //定义一个重载的函数模板
    {
        type tRet = 0; //定义一个变量
        for(int i=0;i<nLen;i++) //利用循环累计求和
        {
            tRet+=Array[i];
        }
        return tRet; //返回结果
    }
    
    int main(int argc, char* argv[]) //主函数
    {
        int nRet = Add(100, 200); //调用第1个重载的函数模板,实现两个数的求和运算
        cout << "整数之和:" << nRet << endl; //输出结果
        
        int nArray[5] = {1,2,3,4,5}; //定义一个整形数组
        int nSum = Add(nArray, 5); //调用第2个重载的函数模板,实现数组元素的求和运算
        cout << "数组元素之和:" << nSum << endl; //输出结果
        return 0;
    }



  • 相关阅读:
    ActiveSync合作关系对话框的配置
    WINCE对象存储区(object store)
    Wince 隐藏TASKBAR的方法
    Wince输入法换肤换语言机制
    poj 3080 Blue Jeans 解题报告
    codeforces A. Vasily the Bear and Triangle 解题报告
    hdu 1050 Moving Tables 解题报告
    hdu 1113 Word Amalgamation 解题报告
    codeforces A. IQ Test 解题报告
    poj 1007 DNA Sorting 解题报告
  • 原文地址:https://www.cnblogs.com/pythonschool/p/2750880.html
Copyright © 2011-2022 走看看